ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
HTMLPurifier_PercentEncoder Class Reference

Class that handles operations involving percent-encoding in URIs. More...

+ Collaboration diagram for HTMLPurifier_PercentEncoder:

Public Member Functions

 __construct ($preserve=false)
 String of characters that should be preserved while using encode().
 encode ($string)
 Our replacement for urlencode, it encodes all non-reserved characters, as well as any extra characters that were instructed to be preserved.
 normalize ($string)
 Fix up percent-encoding by decoding unreserved characters and normalizing.

Protected Attributes

 $preserve = array()
 Reserved characters to preserve when using encode().

Detailed Description

Class that handles operations involving percent-encoding in URIs.

Warning
Be careful when reusing instances of PercentEncoder. The object you use for normalize() SHOULD NOT be used for encode(), or vice-versa.

Definition at line 11 of file PercentEncoder.php.

Constructor & Destructor Documentation

HTMLPurifier_PercentEncoder::__construct (   $preserve = false)

String of characters that should be preserved while using encode().

Parameters
bool$preserve

Definition at line 24 of file PercentEncoder.php.

References $preserve.

{
// unreserved letters, ought to const-ify
for ($i = 48; $i <= 57; $i++) { // digits
$this->preserve[$i] = true;
}
for ($i = 65; $i <= 90; $i++) { // upper-case
$this->preserve[$i] = true;
}
for ($i = 97; $i <= 122; $i++) { // lower-case
$this->preserve[$i] = true;
}
$this->preserve[45] = true; // Dash -
$this->preserve[46] = true; // Period .
$this->preserve[95] = true; // Underscore _
$this->preserve[126]= true; // Tilde ~
// extra letters not to escape
if ($preserve !== false) {
for ($i = 0, $c = strlen($preserve); $i < $c; $i++) {
$this->preserve[ord($preserve[$i])] = true;
}
}
}

Member Function Documentation

HTMLPurifier_PercentEncoder::encode (   $string)

Our replacement for urlencode, it encodes all non-reserved characters, as well as any extra characters that were instructed to be preserved.

Note
Assumes that the string has already been normalized, making any and all percent escape sequences valid. Percents will not be re-escaped, regardless of their status in $preserve
Parameters
string$stringString to be encoded
Returns
string Encoded string.

Definition at line 59 of file PercentEncoder.php.

References $ret.

{
$ret = '';
for ($i = 0, $c = strlen($string); $i < $c; $i++) {
if ($string[$i] !== '%' && !isset($this->preserve[$int = ord($string[$i])])) {
$ret .= '%' . sprintf('%02X', $int);
} else {
$ret .= $string[$i];
}
}
return $ret;
}
HTMLPurifier_PercentEncoder::normalize (   $string)

Fix up percent-encoding by decoding unreserved characters and normalizing.

Warning
This function is affected by $preserve, even though the usual desired behavior is for this not to preserve those characters. Be careful when reusing instances of PercentEncoder!
Parameters
string$stringString to normalize
Returns
string

Definition at line 80 of file PercentEncoder.php.

References $ret.

{
if ($string == '') {
return '';
}
$parts = explode('%', $string);
$ret = array_shift($parts);
foreach ($parts as $part) {
$length = strlen($part);
if ($length < 2) {
$ret .= '%25' . $part;
continue;
}
$encoding = substr($part, 0, 2);
$text = substr($part, 2);
if (!ctype_xdigit($encoding)) {
$ret .= '%25' . $part;
continue;
}
$int = hexdec($encoding);
if (isset($this->preserve[$int])) {
$ret .= chr($int) . $text;
continue;
}
$encoding = strtoupper($encoding);
$ret .= '%' . $encoding . $text;
}
return $ret;
}

Field Documentation

HTMLPurifier_PercentEncoder::$preserve = array()
protected

Reserved characters to preserve when using encode().

array

Definition at line 18 of file PercentEncoder.php.

Referenced by __construct().


The documentation for this class was generated from the following file: