这是vbscript的实现的方法输入要处理的文本
<TEXTAREA NAME="asdf" ROWS="10" COLS=""></TEXTAREA><br>
输出内容<TEXTAREA ROWS="10" COLS="" name="output"></TEXTAREA><br>
<input type=button value=判断长度,一个中文为2个长度 onclick="output.value=lenX(asdf.value)"><br>
<input type=button value=从左边截取固定长度 onclick="output.value=leftX(asdf.value,500)"><br>
'--------------------------------------------------------
'Name: lenX
'Argument: uStr
'Return:
'Description: 返回字符串的长度,1个中文字符长度为2
'--------------------------------------------------------
function lenX(byval uStr)
dim theLen,x,testuStr
theLen = 0
for x = 1 to len(uStr)
testuStr=mid(uStr,x,1)
if asc(testuStr) < 0 then
theLen=theLen + 2
else
theLen=theLen + 1
end if
next
lenX=theLen
end function
'--------------------------------------------------------
'Name: leftX
'Argument: uStr 待处理的字符串
' uLen 要截取的长度
'Return:
'Description: 返回指定长度的字符串,1个中文字符长度为2
'--------------------------------------------------------
function leftX(byval uStr,byval uLen)
dim i,j,uTestStr,theStr
leftX = ""
j = 0
for i = 1 to len(uStr)
uTestStr= mid(uStr,i,1)
theStr = theStr & uTestStr
if asc(uTestStr) < 0 then
j = j + 2
else
j = j + 1
end if
if j >= uLen then exit for
next
leftX = theStr
end function
'--------------------------------------------------------
'Name: rightX
'Argument: uStr 待处理的字符串
' uLen 要截取的长度
'Return:
'Description: 返回指定长度的字符串,1个中文字符长度为2
'--------------------------------------------------------
function rightX(byval uStr,byval uLen)
dim i,j,uTestStr
rightX = ""
j=0
for i=len(uStr) to 1 step -1
uTestStr = mid(uStr,i,1)
rightX=rightX & uTestStr
if asc(uTestStr) < 0 then
j = j + 2
else
j = j + 1
end if
if j >= uLen then exit for
next
end function
</script>

解决方案 »

  1.   

    <?php
    $chnStr="计算中文abc的字符";
    preg_match_all("/[\x80-\xff]{2}/s",$chnStr,$arr);
    print_r($arr[0]); //看看有哪些中文
    echo count($arr[0]); //数目
    ?>
      

  2.   

    strlen(preg_replace("/^[".chr(0xa1)."-".chr(0xff)."]+$/","**", $str)));就可以了
    因为一个中文占两个字节,所以用两个**或者其它一个字母来替换,就可以算出长度了。
      

  3.   

    <?
    $str  =  "中文ghkj测试";  
    preg_match_all("/([\x81-\xfe][\x40-\xfe])/",  $str,  $ch);  
    $patterns  =  array_unique($ch[0]);  
    //print_r($patterns);
    echo count($patterns);
    ?>
      

  4.   

    $chnStr="计算中文abc的字符";
    preg_match_all("/([\x80-\xff].)/",$chnStr,$regs);
    echo join("",$regs[1]);
      

  5.   

    <?
    $chnStr="计算中文abc的字符";
    preg_match_all("/([\x80-\xff].)/",$chnStr,$regs);
    echo strlen(implode("",$regs[1]))/2;
    ?>
      

  6.   

    哦,要计算字数
    $chnStr="计算中文abc的字符";
    preg_match_all("/([\x80-\xff].)/",$chnStr,$regs);
    echo count($regs[1]);
      

  7.   

    能否实现类似:
    $str1 = "计算中文ab";
    $str2 = "c的字符"
      

  8.   

    可以用iconv_substr 或mb_substr,但最好看FAQ里的方法。
      

  9.   

    "从中间截取"截取是什么意思?
    preg_match_all("/([\x80-\xff].)/",$chnStr,$regs);
    后,$regs[1]的每一个元素都是一个汉字
    若要提取连续的汉字,则
    $chnStr="计算中文abc的字符";
    preg_match_all("/((?:[\x80-\xff].)+)/",$chnStr,$regs);
    print_r($regs[1]);
      

  10.   

    哦,是这个意思$chnStr="计算中文abc的字符";
    $str1 = mb_substr($chnStr,0,6);
    $str2 = mb_substr($chnStr,-4);如不能使用mb_substr(需要加载mb_string扩展库),可以自己写一个
    与mb_substr等价的,按字算
    function m_substr($str,$start) {
      preg_match_all("/[\x80-\xff]?./",$str,$ar);
      if(func_num_args() >= 3) {
        $end = func_get_arg(2);
        return join("",array_slice($ar[0],$start,$end));
      }else
        return join("",array_slice($ar[0],$start));
    }与substr等价的,按字节算
    function c_substr($str,$start=0) {
      $ch = chr(127);
      $p = array("/[\x81-\xfe]([\x81-\xfe]|[\x40-\xfe])/","/[\x01-\x77]/");
      $r = array("","");
      if(func_num_args() > 2)
        $end = func_get_arg(2);
      else
        $end = strlen($str);
      if($start < 0)
        $start += $end;  if($start > 0) {
        $s = substr($str,0,$start);
        if($s[strlen($s)-1] > $ch) {
          $s = preg_replace($p,$r,$s);
        $start += strlen($s);
        }
      }
      $s = substr($str,$start,$end);
      $end = strlen($s);
      if($s[$end-1] > $ch) {
        $s = preg_replace($p,$r,$s);
        $end += strlen($s);
      }
      return substr($str,$start,$end);
    }