/**
 * 计算字符串的长度(汉字按照两个字符计算)
 *
 * @param   string      $str        字符串
 *
 * @return  int
 */
function str_len($str)
{
    $length = strlen(preg_replace('/[\x00-\x7F]/', '', $str));    if ($length)
    {
        return strlen($str) - $length + intval($length / 3) * 2;
    }
    else
    {
        return strlen($str);
    }
}这段代码中intval($length / 3) * 2为什么这样写不是直接可以intval($length / 2)假如
$str="abc中abc";(长度是7)intval($length / 3) * 2这样写的话就得出是6(事实上是7)

解决方案 »

  1.   

    编码  UTF-8汉字占3字节
      

  2.   

    你的代码ECS里的吧?其实mb_strlen就够了,没必要用自定义函数开源产品是为了兼容各种环境设置的
      

  3.   

    你要分清你所要的长度和strlen给出的长度之间的区别.在存在汉字的情况下,设汉字个数为x,你要的汉字部分的长度是 2x ,strlen给的汉字部分的长度是 3x,所以要减去多余的一个x。strlen($str) - $length + intval($length / 3) * 2中把$length用3x带入后实际上就是strlen($str)-x
      

  4.   


    function str_len($str)
    {
        $length = strlen(preg_replace('/[\x80-\xff]/', 'x', $str));
    return $length;
    }
    //这样计算最好
    $str = "abc中国人,abc";
    echo str_len($str);   //14