/*===================字符串截取中文函数======================*/
function cnsubstr($str,$len)
{
  if(strlen($str)>$len)
  {
    $temp=0;
    for($i=0;$i<$len;$i++)
    {
      if(ord($str[$i])>0xa0) $temp++;
    }
    if($temp%2==0) $str=substr($str,0,$len)."...";
    else $str=substr($str,0,$len+1)."...";
  }
  return $str;
}$str="的字符串进行截取?因为不能确定中文字符的位置(奇数或偶数)。结果截取输出是出现乱码!如何解决?谢谢各位了!";
echo cnsubstr($str,30);

解决方案 »

  1.   

    用ORD和CHR来认出是不是汉字。
      

  2.   

    /**
     * 控制显示文字个数
     * @param: $str 要截取的字符串
     * @param: $num 截取字符长度
     * @return: $out 符合长度要求的字符串
     */
    function SubstrGB($str,$num)
    {
        $pos=0;
        $out="";
    $str=trim($str);
        while(($c=substr($str,$pos,1))!=''){
            if(substr($str,$pos+1,1)=="" and $c=="\n") break;
            if(ord($c)>128){
                $out.=$c;
                $pos++;
                $c=substr($str,$pos,1);
                $out.=$c;
            }
            else{
                $out.=$c;
            }
            $pos++;
            if($pos>=$num) break;
        }
    $out=str_replace("<br>","",trim($out));
    if(strlen($str)>$num) $out=$out."...";
        return $out;
    }
      

  3.   

    用得着自己写函数吗?php本身就有!加载mbstringmb_substr()
      

  4.   

    这是我的函数.我一直在用.挺好用//***********************************************************
    //截取部分字符串
    /***********************************************************************************************
    函数名称:一个可以截取指定字符串指定长度的函数
    函数原形: string Showtitle(string str,int [strlen]);
    参数说明: $str 要处理的字符串
      $strlen 要截取的长度
    作用:截取指定字符串指定长度的函数,该函数可自动判定中英文,不会出现乱码
    ***********************************************************************************************/function Showtitle($str,$strlen=10) {
    for($i=0;$i<$strlen;$i++)
      if(ord(substr($str,$i,1))>0xa0) $j++;
    if($j%2!=0) $strlen++;
    $str=substr($str,0,$strlen);
    return $str;
    }
      

  5.   

    mb_substr()需要加载库, 很多服务器好像都不允许的吧:)
      

  6.   

    我感觉这是php的一个缺点.那些做网站的也是.该加载的库不加载什么意思吗?
      

  7.   

    加载mbsting绝对可以
    修改php.ini:
    去处extension=php_mbstring.dll前面的分号然后使用mb_substr来截取或者你将你要截取的字符串帖出来
      

  8.   

    我是个新手请问如何加载?我的php.ini中无extension=php_mbstring.dll。我该如何?再问*.dll是什么文件?
      

  9.   

    什么系统???如果是windows,在php.ini中加上:
    extension=php_mbstring.dll
    这一行
    并且注意
    extension_dir =x:/php/extensions
    的路径要为php_mbstring.dll所在目录,一般php的extensions目录有如果是linux,安装php的时候注意带上扩展参数:
    --with-mbstring
      

  10.   

    我装的时候就在php.ini里把他前面的分号去掉就可以用了.也就是说是自带的.试试看吧.呵呵.
      

  11.   

    我知道在php.ini里把他前面的分号去掉,但在php文件夹下的dlls文件夹下没有php_mbstring.dll,在请问*.dll是什么文件?
      

  12.   

    http://kromann.info/php4/php_mbstring.dll
      

  13.   

    您的字符串里有汉字吧,汉字编码由两字符组成,的高位是1,也就是说第一字节大于128,用ord()判断一下,如果大于128,多截一字节即可.
      

  14.   

    php_mbstring.dll是放在PHP的extensions目录下的,而不是DLLS目录。