晕,当然是原创的!昨天晚上睡觉想出来的!呵呵!收藏记得打上myspsp的标签!谢谢!

解决方案 »

  1.   

    如果禁用了js呢?
    $s = '以前在这里发过一个关于取标题前10个字的求救贴';
    preg_match_all('/[\x80-\xff]?./', $s, $r);
    echo join('', array_slice($r[0], 0, 20));
      

  2.   

    噢,是10个字
    echo join('', array_slice($r[0], 0, 10));
      

  3.   

    function gbk_strlen(&$str) 

    $len=strlen($str); 
    $l=0; 
    for($i=0;$i<$len;$i++) 

    if(ord(substr($str,$i,1))>=0x81) $i++; 
    $l++; 

    return $l; 
    } function gb2312_strlen(&$str) 

    $len=strlen($str); 
    $l=0; 
    for($i=0;$i<$len;$i++) 

    if(ord(substr($str,$i,1))>=0xa1) $i++; 
    $l++; 

    return $l; 

      

  4.   

    xuzuning(唠叨)  你好!preg_match_all('/[\x80-\xff]?./', $s, $r);
    echo join('', array_slice($r[0], 0, 20));恕在下水平底下,请问这是什么意思!我的php水平很低,还请多多指教!
    hzqghost(古月血魔) 你好!你写的这个方法我用过,不是很理想!
      

  5.   

    preg_match_all('/[\x80-\xff]?./', $s, $r);
    用正则表达式提取匹配的字符到数组
    其中
    [\x80-\xff].匹配汉字
    . 匹配任意字符
    所以
    [\x80-\xff]?. 将一个汉字作为一组(两个字节),一个ascii字符也作为一组(一个字节)echo join('', array_slice($r[0], 0, 20));

    array_slice从数组中取出子数组,有点substr对于字符串的味道
    join连接数组成字符串
      

  6.   

    function ch_left($s, $len){
        if(strlen($s)>$len)
            $s=substr($s, 0, $len);
        $ch='[\x80-\xff]';
        if(preg_match("/$ch($ch{2})*$/", $s))
            $s=substr($s,0,-1);
        return $s;
    }