in src/utils/utf8.php [396:449]
function phutil_utf8v($string, $byte_limit = null) {
$res = array();
$len = strlen($string);
$ii = 0;
while ($ii < $len) {
$byte = $string[$ii];
if ($byte <= "\x7F") {
$res[] = $byte;
$ii += 1;
if ($byte_limit && ($ii >= $byte_limit)) {
break;
}
continue;
} else if ($byte < "\xC0") {
throw new Exception(
pht('Invalid UTF-8 string passed to %s.', __FUNCTION__));
} else if ($byte <= "\xDF") {
$seq_len = 2;
} else if ($byte <= "\xEF") {
$seq_len = 3;
} else if ($byte <= "\xF7") {
$seq_len = 4;
} else if ($byte <= "\xFB") {
$seq_len = 5;
} else if ($byte <= "\xFD") {
$seq_len = 6;
} else {
throw new Exception(
pht('Invalid UTF-8 string passed to %s.', __FUNCTION__));
}
if ($ii + $seq_len > $len) {
throw new Exception(
pht('Invalid UTF-8 string passed to %s.', __FUNCTION__));
}
for ($jj = 1; $jj < $seq_len; ++$jj) {
if ($string[$ii + $jj] >= "\xC0") {
throw new Exception(
pht('Invalid UTF-8 string passed to %s.', __FUNCTION__));
}
}
$res[] = substr($string, $ii, $seq_len);
$ii += $seq_len;
if ($byte_limit && ($ii >= $byte_limit)) {
break;
}
}
return $res;
}