计算字符串的长度的问题?

quege 2010-11-03 04:30:28

/**
* 计算字符串的长度(汉字按照两个字符计算)
*
* @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)
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stoneJU 2010-11-03
  • 打赏
  • 举报
回复

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

lazysmile 2010-11-03
  • 打赏
  • 举报
回复
你要分清你所要的长度和strlen给出的长度之间的区别.在存在汉字的情况下,设汉字个数为x,你要的汉字部分的长度是 2x ,strlen给的汉字部分的长度是 3x,所以要减去多余的一个x。

strlen($str) - $length + intval($length / 3) * 2中把$length用3x带入后实际上就是strlen($str)-x


quege 2010-11-03
  • 打赏
  • 举报
回复
是ecshop里的
amani11 2010-11-03
  • 打赏
  • 举报
回复
你的代码ECS里的吧?

其实mb_strlen就够了,没必要用自定义函数。。。开源产品是为了兼容各种环境设置的
quege 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 amani11 的回复:]

编码 UTF-8

汉字占3字节
[/Quote]

非常感谢
在-云端 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 amani11 的回复:]

编码 UTF-8

汉字占3字节
[/Quote]

+1
amani11 2010-11-03
  • 打赏
  • 举报
回复
编码 UTF-8

汉字占3字节

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧