国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

PHP中UTF8中文字符截斷程序代碼

2024-05-04 21:58:18
字體:
供稿:網(wǎng)友

最簡單的字符截取函數(shù)是用php自帶的substr(),其實,PHP原生就有多charset下字符截取方案,額,所以就是這個樣子...??.

Multibyte String Functions函數(shù)族中,string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 用來字符串截取

int mb_strlen (string $str [,string $encoding ] ) 返回字符串長度

但它只支持?jǐn)?shù)字與字母不支持中文.

實例,UTF8中文字符截斷,代碼如下:

  1. <?php 
  2.  /* UTF-8中文字符截斷程序 */ 
  3.  
  4.  
  5.  $str = "123這是測試字符串"
  6.  $str1 = "()()"
  7.  echo subUTF8str($str,0,3)."<br>"
  8.  echo subUTF8str($str,0,4)."<br>"
  9.  echo subUTF8str($str1,0,4)."<br>"
  10.  echo subUTF8str($str1,0,10)."<br>"
  11.  
  12.  function subUTF8str($str,$start=0,$length=80){  
  13.     $cur_len = 0; //人理解的字符串長度 
  14.     $all_len = strlen($str); //機器理解字符串長度 
  15.     if($length > $all_len
  16.     { 
  17.          return $str
  18.     } 
  19.     for($i = 0;$i < $all_len;) 
  20.     { 
  21.          if($cur_len == $start
  22.          { 
  23.              break
  24.          } 
  25.          if (ord($str[$i]) > 127) 
  26.          { 
  27.              $i += 3; 
  28.          }else
  29.              $i += 1; 
  30.          } 
  31.          $cur_len ++; 
  32.     } 
  33.      $start_pos = $i
  34.      $temp_pos = $cur_len
  35.      for(;$cur_len - $temp_pos < $length;) 
  36.      { 
  37.          if($i >= $all_len
  38.              break
  39.          if (ord($str[$i]) > 127) 
  40.          { 
  41.              $i += 3; 
  42.          }else
  43.              $i += 1; 
  44.          } 
  45.          $cur_len ++; 
  46.      } 
  47.      $end_pos = $i
  48.      return substr($str,$start_pos,$end_pos); 
  49.  }  
  50.  ?> 

改進后我們把它分頁,這樣可支持ut8與gbk等中文字符截取,代碼如下:

  1. function substrs($content$length){ 
  2.  if($length && strlen($content)>$length){ 
  3.   if($db_charset!='utf-8'){ 
  4.    $retstr=''
  5.    for($i = 0; $i < $length - 2; $i++) { 
  6.     $retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i]; 
  7.    } 
  8.    return $retstr
  9.   }else
  10.    return utf8_trim(substr($content,0,$length*3)); 
  11.   } 
  12.  } 
  13.  return $content
  14.  
  15. function utf8_trim($str) { 
  16.  $len = strlen($str); 
  17.  for($i=strlen($str)-1;$i>=0;$i-=1){ 
  18.   $hex .= ' '.ord($str[$i]); 
  19.   $ch   = ord($str[$i]); 
  20.   if(($ch & 128)==0) return substr($str,0,$i); 
  21.   if(($ch & 192)==192)return substr($str,0,$i); 
  22.  } 
  23.  return($str.$hex); 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁安市| 珠海市| 汤阴县| 岫岩| 奉化市| 万盛区| 沭阳县| 综艺| 专栏| 来安县| 博罗县| 平阳县| 万全县| 睢宁县| 德惠市| 静海县| 历史| 平顶山市| 济源市| 永新县| 宁晋县| 思南县| 绥化市| 紫阳县| 龙泉市| 县级市| 桦南县| 安远县| 陇西县| 闵行区| 沂源县| 章丘市| 万州区| 仪陇县| 乳源| 吴旗县| 息烽县| 孝昌县| 新田县| 建瓯市| 林西县|