seems_utf8() cleanup. Props hakre. fixes #9692

git-svn-id: http://svn.automattic.com/wordpress/trunk@11414 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2009-05-20 21:13:14 +00:00
parent fe55cd7da6
commit a6580f16f5

View File

@ -172,25 +172,28 @@ function wpautop($pee, $br = 1) {
/** /**
* Checks to see if a string is utf8 encoded. * Checks to see if a string is utf8 encoded.
* *
* @author bmorel at ssi dot fr * NOTE: This function checks for 5-Byte sequences, UTF8
* has Bytes Sequences with a maximum length of 4.
* *
* @author bmorel at ssi dot fr (modified)
* @since 1.2.1 * @since 1.2.1
* *
* @param string $Str The string to be checked * @param string $str The string to be checked
* @return bool True if $Str fits a UTF-8 model, false otherwise. * @return bool True if $str fits a UTF-8 model, false otherwise.
*/ */
function seems_utf8($Str) { # by bmorel at ssi dot fr function seems_utf8(&$str) {
$length = strlen($Str); $length = strlen($str);
for ($i=0; $i < $length; $i++) { for ($i=0; $i < $length; $i++) {
if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb $c = ord($str[$i]);
elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb if ($c < 0x80) $n = 0; # 0bbbbbbb
elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
else return false; # Does not match any model else return false; # Does not match any model
for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80))
return false; return false;
} }
} }