zoukankan      html  css  js  c++  java
  • 实用技巧:PHP截取中文字符串的问题

    简介:这是实用技巧:PHP截取中文字符串的问题的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=324009' scrolling='no'> 以下代码试用于GB2312编码,截取中文字符串是PHP中一个头疼的问题,解决方法是根据值是否大于等于128来判断是否是双字节字符,以避免出现乱码的情况。但中英文混合、特殊符号等问题总是存在,现在写一个比较全面的,仅供参考:

    程序说明:

    1. len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些

    2. 如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数

    3. 特别适用于用htmlspecialchars()进行过编码的字符串

    4. 能正确处理GB2312中实体字符模式()

    程序代码:
    function FSubstr($title,$start,$len="",$magic=true) 
    
    {
    
    /**
    
      *  powered by Smartpig
    
      *  mailto:d.einstein@263.net
    
      */
    
      
    
    $length = 0;
    
    if($len == "") $len = strlen($title);
    
    
    
    //判断起始为不正确位置
    
    if($start > 0)
    
    {
    
      $cnum = 0;
    
      for($i=0;$i<$start;$i  )
    
      {
    
       if(ord(substr($title,$i,1)) >= 128) $cnum   ;
    
      }
    
      if($cnum%2 != 0) $start--;
    
      
    
      unset($cnum);
    
    }
    
    
    
    if(strlen($title)<=$len) return substr($title,$start,$len);
    
    
    
    $alen   = 0;
    
    $blen = 0;
    
    
    
    $realnum = 0;
    
    
    
    for($i=$start;$i<strlen($title);$i  )
    
    {
    
      $ctype = 0;
    
      $cstep = 0;
    
      $cur = substr($title,$i,1);
    
      if($cur == "&")
    
      {
    
       if(substr($title,$i,4) == "&lt;")
    
       {
    
        $cstep = 4;
    
        $length  = 4;
    
        $i  = 3;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $alen   ;
    
        }
    
       }
    
       else if(substr($title,$i,4) == "&gt;")
    
       {
    
        $cstep = 4;
    
        $length  = 4;
    
        $i  = 3;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $alen   ;
    
        }
    
       }
    
       else if(substr($title,$i,5) == "&amp;")
    
       {
    
        $cstep = 5;
    
        $length  = 5;
    
        $i  = 4;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $alen   ;
    
        }
    
       }
    
       else if(substr($title,$i,6) == "&quot;")
    
       {
    
        $cstep = 6;
    
        $length  = 6;
    
        $i  = 5;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $alen   ;
    
        }
    
       }
    
       else if(substr($title,$i,6) == "&#039;")
    
       {
    
        $cstep = 6;
    
        $length  = 6;
    
        $i  = 5;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $alen   ;
    
        }
    
       }
    
       else if(preg_match("/&#(\d );/i",substr($title,$i,8),$match))
    
       {
    
        $cstep = strlen($match[0]);
    
        $length  = strlen($match[0]);
    
        $i  = strlen($match[0])-1;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $blen   ;
    
         $ctype = 1;
    
        }
    
       }
    
      }else{
    
       if(ord($cur)>=128)
    
       {
    
        $cstep = 2;
    
        $length  = 2;
    
        $i  = 1;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $blen   ;
    
         $ctype = 1;
    
        }
    
       }else{
    
        $cstep = 1;
    
        $length  =1;
    
        $realnum   ;
    
        if($magic)
    
        {
    
         $alen  ;
    
        }
    
       }
    
      }
    
      
    
      if($magic)
    
      {
    
       if(($blen*2 $alen) == ($len*2)) break;
    
       if(($blen*2 $alen) == ($len*2 1))
    
       {
    
        if($ctype == 1)
    
        {
    
         $length -= $cstep;
    
         break;
    
        }else{
    
         break;
    
        }
    
       }
    
      }else{
    
       if($realnum == $len) break;
    
      }
    
    }
    
    
    
    unset($cur);
    
    unset($alen);
    
    unset($blen);
    
    unset($realnum);
    
    unset($ctype);
    
    unset($cstep);
    
    
    
    return substr($title,$start,$length);
    
    }

    “实用技巧:PHP截取中文字符串的问题”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/324009.html pageNo:15
  • 相关阅读:
    mybatis源码(三)SqlSession执行mapper的过程上篇
    Mybatis源码(二)mybatis核心组件介绍
    Mybatis源码(一) 之SqlSession的创建
    设计模式的分类及其六大设计原则
    设计模式之桥接模式
    设计模式之解释器模式
    设计模式之享元模式
    hdu3652
    Codeforces Round #703 (div2)
    Educational Codeforces Round 104
  • 原文地址:https://www.cnblogs.com/ooooo/p/2255000.html
Copyright © 2011-2022 走看看