View Single Post
ישן 01-04-07, 11:09   # 5
RS324
תודה על תרומתך.
 
מיני פרופיל
תאריך הצטרפות: May 2006
הודעות: 3,173

RS324 לא מחובר  

ציטוט:
נכתב במקור על ידי 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 זה מומלץ
  Reply With Quote