首頁  >  文章  >  後端開發  >  PHP截取中文字串的問題_PHP教程

PHP截取中文字串的問題_PHP教程

WBOY
WBOY原創
2016-07-21 16:12:16761瀏覽

以下程式碼試用於GB2312編碼,截取中文字串是PHP中一個頭痛的問題,解決方法是根據值是否大於等於128來判斷是否是雙字節字符,以避免出現亂碼的情況。但中英文混合、特殊符號等問題總是存在,現在寫一個比較全面的,僅供參考:

程序說明:

1. len 參數以中文字符為標準,1len等於2個英文字符,為了形式上好看些

2. 如果將magic參數設為false,則中文和英文同等看待,取絕對的字符數

3. 特別適用於用htmlspecialchars()進行過編碼的字串

4. 能正確處理GB2312中實體字元模式(𖰰)

程式碼: 
function FSubstr($title, $start,$len="",$magic=true) 
{
/**
  *  由 Smartpig 提供支援
  *  mailto:d.einstein@263.net
  */

$length = 0;
if($len == " ") $len = strlen($title);

//判斷起始為不正確位置
if($start > 0)
{
  $cnum = 0)
{
  $cnum = 0;
  for($i=0;$i  {
   if(ord(substr($title,$i,1)) >= 128) $cnum  ;
;
  if($cnum%2 != 0) $start--;

  unset($cnum);
}

if(strlen($title)
$alen   = 0;
$blen = 0;
$blen = 0;

$realnum = 0; >for($i=$start;$i{
  $ctype = 0;
  $cstep = 0;
 title,$i,1);
  if($cur == "&")
  {
   if(substr($title,$i,4) == "{  
    $cstep = 4;
    $length  = 4;
    $i  = 3)
     {
     $alen  ;
    }
   }
   else if(substr($title,$i,4) == ">")
    ;
    $i  = 3;
    $realnum  ;
    if($magic)
    
   else if(substr($title,$ i,5) == "&")
   {
    $cstep = 5;
    $ c 🎜>    if($ magic)
    {
     $alen  ;
    }
   }
    $ cstep = 6;
    $length  = 6;
    $i  = 5;
       $alen  ;
    }
   }
   else if(substr($title,$i,6) == "'")
   {
     $i  = 5;
    $realnum  ;
    if($magic)
    {
      if(preg_match("/(d ); /i",substr($title,$i,8),$match))
   {
    $cstep = strlen($match[0]);
   ]);
    $i  = strlen($match[0])-1;
    $realnum  ;
    if($     $ctype = 1;
    }
   }
  }else{
   if(ord($cur)>=128)
   {
    $cstep = 2;     if($magic)
    {
     $blen  ;
      $cstep = 1;
    $length = 1;
    $realnum ;
    if($magic)
    {
     
  if($magic)
  {
   if(($blen*2 $alen) == ($len*2)) break ;
   if(($blen*2 $alen) == ($len*2 1)
   {
    if($ctype == 1)
    {
       🎜>     休息;
    }
   }
  }else{
   if($realnum == $len) break;
  }
}


($alen);
未設定($blen);
未設定($realnum);
未設定($ctype);
取消設定($cstep);

return substr($title,$start,$length);






http://www.bkjia.com/PHPjc/313733.html

www.bkjia.com

true

http: //www.bkjia.com/PHPjc/313733.html

TechArticle

以下程式碼用於試GB2312編碼,截取中文字串是PHP中一個頭痛的問題,方法是根據值是否大於等於128來判斷是否為雙字節字符,數組出...

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn