<? echo substr($name,0,14).chr(0);?>
"被超链接的文字就会以 ?/a> 这样的文字结束"——这是因为汉字被截断了
后面跟一个chr(0)“空字符”就可以补齐被截断的汉字

解决方案 »

  1.   

    /* 
     * 可以避免乱码的截取汉字
     * 参数 $str 为字符串,$start 为开始字符,$len 结束字符
     * 返回截取后的字符
     */
    function msubstr($str, $start, $len) { 
    $tmpstr = "";
    $strlen = $start + $len; 
    for($i = 0; $i < $strlen; $i++) { 
    if(ord(substr($str, $i, 1)) > 0xa0) { 
    $tmpstr .= substr($str, $i, 2); 
    $i++; 
    } else 
    $tmpstr .= substr($str, $i, 1); 

    return $tmpstr; 
    }
      

  2.   

    楼上的用法,跟substr的用法一样吗?还是只支持左截取?
      

  3.   

    keaizhong(可爱钟)
    我把你的代码放在PHP代码里面,然后用
    echo msubstr($name,0,14);出现下面的提示,是怎么回事呢?Fatal error: Cannot redeclare msubstr() (previously declared in /home/0gfuwbeo81l9g7r8/wwwroot/index.php:70) in /home/0gfuwbeo81l9g7r8/wwwroot/index.php on line 70
      

  4.   

    这样看看
    $name=msubstr($name,0,14);
      

  5.   

    全角半角问题
    function ChgTitle($title,$start,$len) 

    $length = $len; 
    if(strlen($title)<=$length){
    $result=$title;
    }else{
    $temp = 0; 
    for($i=0;$i<$length;$i++){
    if (ord($title[$i])<128)
    {$temp++;}
    }
    if($temp%2==0){
    $result=substr($title,0,$length);
    }else{
    $result=substr($title,0,$length+1); 
    }

    }
    return $result;
    }
      

  6.   

    1、Fatal error: Cannot redeclare msubstr() (previously .....
     函数msubstr() 被重复定义
    2、“判断以下最后一个是不是大于0x81, 是的话去掉就可以了”
     这样做是错误的!假如正好是汉字的第二的字节呢?
    3、按你的需求,只需在substr()后面接一个chr(0)就可以了,何必一个一个字节判断?!