diff -r 63ca29eda873 -r 4df25dfdde63 includes/functions.php --- a/includes/functions.php Sat Jul 28 18:11:14 2007 -0400 +++ b/includes/functions.php Sun Jul 29 17:40:36 2007 -0400 @@ -1418,6 +1418,10 @@ $_GET = strip_nul_chars($_GET); $_COOKIE = strip_nul_chars($_COOKIE); $_REQUEST = strip_nul_chars($_REQUEST); + $_POST = decode_unicode_array($_POST); + $_GET = decode_unicode_array($_GET); + $_COOKIE = decode_unicode_array($_COOKIE); + $_REQUEST = decode_unicode_array($_REQUEST); } /** @@ -2578,6 +2582,80 @@ return $haystack; } +/** + * From http://us2.php.net/urldecode - decode %uXXXX + * @param string The urlencoded string + * @return string + */ + +function decode_unicode_url($str) +{ + $res = ''; + + $i = 0; + $max = strlen($str) - 6; + while ($i <= $max) + { + $character = $str[$i]; + if ($character == '%' && $str[$i + 1] == 'u') + { + $value = hexdec(substr($str, $i + 2, 4)); + $i += 6; + + if ($value < 0x0080) + { + // 1 byte: 0xxxxxxx + $character = chr($value); + } + else if ($value < 0x0800) + { + // 2 bytes: 110xxxxx 10xxxxxx + $character = + chr((($value & 0x07c0) >> 6) | 0xc0) + . chr(($value & 0x3f) | 0x80); + } + else + { + // 3 bytes: 1110xxxx 10xxxxxx 10xxxxxx + $character = + chr((($value & 0xf000) >> 12) | 0xe0) + . chr((($value & 0x0fc0) >> 6) | 0x80) + . chr(($value & 0x3f) | 0x80); + } + } + else + { + $i++; + } + + $res .= $character; + } + + return $res . substr($str, $i); +} + +/** + * Recursively decodes an array with UTF-8 characters in its strings + * @param array Can be multi-depth + * @return array + */ + +function decode_unicode_array($array) +{ + foreach ( $array as $i => $val ) + { + if ( is_string($val) ) + { + $array[$i] = decode_unicode_url($val); + } + else + { + $array[$i] = decode_unicode_array($val); + } + } + return $array; +} + //die('
Original:  01010101010100101010100101010101011010'."\nProcessed: ".uncompress_bitfield(compress_bitfield('01010101010100101010100101010101011010')).'
'); ?>