WordPress.org

Make WordPress Core

Ticket #9692: 9692.patch

File 9692.patch, 1.7 KB (added by hakre, 6 years ago)

seems_utf8() some improvements incl. comments.

  • wp-includes/formatting.php

     
    159159/** 
    160160 * Checks to see if a string is utf8 encoded. 
    161161 * 
    162  * @author bmorel at ssi dot fr 
     162 * NOTE: This function checks for 5-Byte sequences, UTF8  
     163 *       has Bytes Sequences with a maximum length of 4. 
    163164 * 
     165 * @author bmorel at ssi dot fr (modified) 
    164166 * @since 1.2.1 
    165167 * 
    166168 * @param string $Str The string to be checked 
    167169 * @return bool True if $Str fits a UTF-8 model, false otherwise. 
    168170 */ 
    169 function seems_utf8($Str) { # by bmorel at ssi dot fr 
    170         $length = strlen($Str); 
     171function seems_utf8(&$str) { 
     172        $length = strlen($str); 
    171173        for ($i=0; $i < $length; $i++) { 
    172                 if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb 
    173                 elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb 
    174                 elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb 
    175                 elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb 
    176                 elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb 
    177                 elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b 
     174                $c = ord($str[$i]);  
     175                if ($c < 0x80) $n = 0; # 0bbbbbbb 
     176                elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb 
     177                elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb 
     178                elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb 
     179                elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb 
     180                elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b 
    178181                else return false; # Does not match any model 
    179182                for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? 
    180                         if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80)) 
    181                         return false; 
     183                        if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) 
     184                                return false; 
    182185                } 
    183186        } 
    184187        return true;