写错了。是:目的,截取指定字串($str)指定长度($len).  如果$len正好把一个汉字给拆开了,就截取$len-1. 比如$str是"aaa汉",而$len是4,那么就截取长度取3.谁能给个函数,或思路。谢谢!

解决方案 »

  1.   

    <input type="text" name="w" size="20"><input type="submit" name="B1" onclick="alert(w.value.replace(/[^\x00-\xff]/g,'**').length)">
      

  2.   

    大哥,我需要php函数。比如,
    $a = substr("aaaaa拨", 0 , 6);
    echo $a . "...";结果是aaaaa?..我想解决这个问题。
      

  3.   

    function substrForgb($str,$len){
    //该函数只能从开始从截取,如从中间开始,同样需要分析是不是在拆分汉字
    //原理:国标码的编码机内码为161到255,即A0到FF
    $totlen=strlen($str);
    $i=min($len,$totlen);
    $i--;
    $flag=-1;
    while ($i>=0){
    if (ord(substr($str,$i,1))>160){
    $flag=-1*$flag;
    echo $flag."&nbsp;".ord(substr($str,$i,1))."<br>";
    }else break;
    $i--;
    }
    if($flag==1)$len=$len-1;
    $subit=substr($str,0,$len);
    return $subit;
    }
      

  4.   

    echo $flag."&nbsp;".ord(substr($str,$i,1))."<br>";//该行为测试时所用,正式使用时去除
      

  5.   

    老是打错!!!!!!
    ========================================
    /*
      指定字串:$str
      指定长度:$len
    */  
    function substrForgb($str,$len){
    $totlen=strlen($str);
    $i=min($len,$totlen);
    $i--;
    $flag=-1;
    while ($i>=0){
    if (ord(substr($str,$i,1))>160){
    $flag=-1*$flag;
    }else break;
    $i--;
    }
    if($flag==1)$len=$len-1;
    $subit=substr($str,0,$len);
    return $subit;
    }
    =======================END==========================
      

  6.   

    ========================================
    /*
      指定字串:$str
      指定长度:$len
      指定开始位置:$start
    */  
    function substrForgb($str,$len,$start=0){
    $totlen=strlen($str); if(($len >= $totlen && 0 == $start) || $start > $totlen)
    {
    return $str;
    } if($start>0)
    {
    $i=$start;
    $i--;
    $flag=-1; while ($i>=0)
    {
    if (ord(substr($str,$i,1))>160)
    {
    $flag=-1*$flag;
    }
    else 
    break;
    $i--;
    } if($flag==1)
    {
    $start--;
    }
    }
         if($len < $totlen-$start)
    {
    $i=$len;
    $i--;
    $flag=-1; while ($i>=0)
    {
    if (ord(substr($str,$i,1))>160)
    {
    $flag=-1*$flag;
    }
    else
    break;
    $i--;
    }
    if($flag==1) $len=$len+1;
    }
    $subit=substr($str,$start,$len);
    return $subit;
    }
    =======================END==========================