ציטוט:
נכתב במקור על ידי elbaz.maor
|
ידוע .... הבעיה היא שלא כל שרת תומך בזה ואתה לא יכול לשלב את זה ב PRODUCTION
חיפוש לא ארוך מעלה את התוצאות הבאות :
PHP קוד:
function utf8_substr($str,$from,$len)
{
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
עבור STRLEN :
PHP קוד:
function utf8_strlen($str) {
$n=0;
for($i=0; isset($str{$i}) && strlen($str{$i})>0; $i++) {
$c = ord($str{$i});
if (!($c & 0x80)) // single-byte (0xxxxxx)
$n++;
elseif (($c & 0xC0) == 0xC0) // multi-byte starting byte (11xxxxxx)
$n++;
}
return $n;
}
function utf8_strlen($str)
{
$count = 0;
for($i = 0; $i < strlen($str); $i++)
{
$value = ord($str[$i]);
if($value > 127)
{
if($value >= 192 && $value <= 223)
$i++;
elseif($value >= 224 && $value <= 239)
$i = $i + 2;
elseif($value >= 240 && $value <= 247)
$i = $i + 3;
else
die('Not a UTF-8 compatible string');
}
$count++;
}
return $count;
}
// choice 1
function utf8_strlen($str) {
$count = 0;
for ($i = 0; $i < strlen($str); ++$i) {
if ((ord($str[$i]) & 0xC0) != 0x80) {
++$count;
}
}
return $count;
}
// choice 2
function utf8_strlen($str) {
return preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $str, $dummy);
}
יש עוד כמה פונקציות שעושות בעיות עם UTF8
כמובן שאם יש MBSTRING זה מומלץ