[PHP] PHP中文字符串截取函数 过长自动截断并加上... →→→→→进入此内容的聊天室

来自 , 2019-12-21, 写在 PHP, 查看 121 次.
URL http://www.code666.cn/view/b98249b3
  1. /****首先是CSDN论坛PHP斑竹xuzuning(唠叨)老大的,支持gb2312,gbk,big三种编码。
  2. 以下是代码:***/
  3. $len = 19;
  4. $text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
  5. echo strlen($text)<=$len ? $text : (substr($text,0,$len).chr(0)."....");
  6. /****chr(0)不是null
  7. null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000
  8. 虽然chr(0)不会显示出什么,但是他是一个字符。
  9. 当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。而值为0x81到0xff与0x00组合始终都显示为“空”
  10. 根据这一特点,在substr的结果后面补上一个chr(0),就可以防止出现乱码了
  11. 注:
  12. 编码 第一字节 第二字节
  13. gb2312 0xa1-0xf7 0xa1-0xfe
  14. gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
  15. big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
  16. 其次这个是网上搜索的,支持utf-8编码,原作者不详:
  17.  *****/
  18.      function subString_UTF8($str, $start, $lenth)
  19.     {
  20.         $len = strlen($str);
  21.         $r = array();
  22.         $n = 0;
  23.         $m = 0;
  24.         for($i = 0; $i < $len; $i++) {
  25.             $x = substr($str, $i, 1);
  26.             $a  = base_convert(ord($x), 10, 2);
  27.             $a = substr('00000000'.$a, -8);
  28.             if ($n < $start){
  29.                 if (substr($a, 0, 1) == 0) {
  30.                 }elseif (substr($a, 0, 3) == 110) {
  31.                     $i += 1;
  32.                 }elseif (substr($a, 0, 4) == 1110) {
  33.                     $i += 2;
  34.                 }
  35.                 $n++;
  36.             }else{
  37.                 if (substr($a, 0, 1) == 0) {
  38.                     $r[ ] = substr($str, $i, 1);
  39.                 }elseif (substr($a, 0, 3) == 110) {
  40.                     $r[ ] = substr($str, $i, 2);
  41.                     $i += 1;
  42.                 }elseif (substr($a, 0, 4) == 1110) {
  43.                     $r[ ] = substr($str, $i, 3);
  44.                     $i += 2;
  45.                 }else{
  46.                     $r[ ] = '';
  47.                 }
  48.                 if (++$m >= $lenth){
  49.                     break;
  50.                 }
  51.             }
  52.         }
  53.         return $r;
  54.     } // End subString_UTF8;
  55. }// End String
  56.  
  57. #由于此函数返回的是一个数组,因此要配合join函数来显示字符串:
  58. #join('',subString_UTF8($str, $start, $lenth));
  59. #在页面显示的时候还可以在此语句后面连一个"..."
  60.  
  61.  
  62.  
  63.  
  64. <php
  65. function get_substr($string,$start='0',$length='')
  66. {
  67.    $start = (int)$start;
  68.    $length = (int)$length;
  69.    $i = 0;
  70.    if(!$string)
  71.    {
  72.       return;
  73.    }
  74.    if($start>=0)
  75.    {
  76.       while($i<$start)
  77.       {
  78.          if(ord($string[$i])>127)
  79.          {
  80.             $i = $i+2;
  81.          }
  82.          else
  83.          {
  84.             $i++;
  85.          }
  86.       }
  87.       $start = $i;
  88.       if($length=='')
  89.       {
  90.          return substr($string,$start);
  91.       }
  92.       elseif($length>0)
  93.       {
  94.          $end = $start+$length;
  95.          while($i<$end)
  96.          {
  97.             if(ord($string[$i])>127)
  98.             {
  99.                $i = $i+2;
  100.             }
  101.             else
  102.             {
  103.                $i++;
  104.             }
  105.          }
  106.          if($end != $i-1)
  107.          {
  108.             $end = $i;
  109.          }
  110.          else
  111.          {
  112.            $end--;
  113.          }
  114.          $length = $end-$start;
  115.          return substr($string,$start,$length);
  116.       }
  117.       elseif($length==0)
  118.       {
  119.          return;
  120.       }
  121.       else
  122.       {
  123.          $length = strlen($string)-abs($length)-$start;
  124.          return get_substr($string,$start,$length);
  125.       }
  126.    }
  127.    else
  128.    {
  129.       $start = strlen($string)-abs($start);
  130.       return get_substr($string,$start,$length);
  131.    }
  132. }
  133. ?>

回复 "PHP中文字符串截取函数 过长自动截断并加上..."

这儿你可以回复上面这条便签

captcha