mb_substr()需要库支持吧!能说得详细一点吗?还有其他好一点的办法吗?

解决方案 »

  1.   

    <?PHP
    $str="这个字符好长呀,^_^";
    $Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符...
    Echo   "$Short_Str";
    Function csubstr($str,$start,$len) 

    $strlen=strlen($str); 
    $clen=0; 
    for($i=0;$i<$strlen;$i++,$clen++) 

    if ($clen>=$start+$len) 
    break; 
    if(ord(substr($str,$i,1))>0xa0) 

    if ($clen>=$start) 
    $tmpstr.=substr($str,$i,2); 
    $i++; 

    else 

    if ($clen>=$start) 
    $tmpstr.=substr($str,$i,1); 

    } return $tmpstr; 

    Function showShort($str,$len) 

    $tempstr = csubstr($str,0,$len); 
    if ($str<>$tempstr) 
    $tempstr .= "..."; //要以什么结尾,修改这里就可以.return $tempstr; 
    }
      

  2.   

    mb_substr()需要支持,编译的时候加上 --enable-mbstring=LANG例如检体中文 为 --enable-mbstring=cn所有支持为 --enable-mbstring=all
      

  3.   

    --enable-mbstring=cn 在哪儿加入呢?如何加入啊?`````
      

  4.   

    如果你是用的unix like的系统,这个是编译php的时候加上的编译项目如果是windows看看有没有相关的dll,在php.ini中打开支持用phpinfo看有没有mbstring的项目出来
      

  5.   

    //函  数:h_substr($str,$len)
    //参  数:$str是原字符串,$len是要取字符串的长度
    //功  能:取指定长度的字符串
    //返回值:截取后的字符串
    function h_substr($str,$len)
    {
    if(func_num_args() <= 1) return $str;
    elseif(func_num_args() == 2)
    {
    preg_match_all("/[\x80-\xff]?./",$str,$ar);
    return join("",array_slice($ar[0],0,($len-1)))."...";
    }
    elseif(func_num_args() >= 3)
    {
    $start= func_get_arg(1);
    $len = func_get_arg(2);
    preg_match_all("/[\x80-\xff]?./",$str,$ar);
    return join("",array_slice($ar[0],$start,($len-1)))."...";
    }
    }
      

  6.   

    因为汉字被截断了,对于你的这个应用只需
    <?php
      $str = "I love 中国" ;  if(strlen($str) > 10)
      {
            $str = substr($str, 0, -1) ;
            $str .= chr(0)."..." ;
      }  echo $str ; // 就输出"I love 中..."了
    ?>而不必装载mb_string扩展库。注意在mb_string函数库中是按字计算的,一个汉字是两个字节,在mb_string中被记为1。所以strlen也要改用mb_strlen。
    当然就更不必要使用低效的基于循环判断的自定义函数了
      

  7.   

    那么在win2000下如何搞mb_substr呢?
    学习……