在PHP中使用半角假名计算日语多字节字符串的长度

icc*_*bot 8 php unicode character-encoding

所以我有一个UTF-8编码的字符串,可以包含全宽汉字,全角假名,半角假名,罗马字,数字或卡哇伊日语符号,如★或♥.

如果我想要我使用的长度mb_strlen(),它将每个长度计为1.这对大多数用途来说都没问题.

但是,我(有一个日本客户)被要求只计算半宽假名为0.5(为了文本字段的最大长度),因为显然这就是日本网站的做法.我这样做使用mb_strwidth()将全宽计为2,将半宽计为1,然后我除以2.

然而,这种方法也将罗马字符计为1,所以类似于Choc???7的东西...然后我除以2来计算汉字,我得到3.5.但我实际上想要5.5(罗马字母为4,半宽假名为1.5).

//编辑:更多信息:任何一个全长和半角的角色(甚至非假名)对于全宽应为1,对于半宽应为0.5.例如,像这样的字符?????应该都是1,但是字符¥,3@(应该都是0.5

// EXTRA EDIT:像☆和♥这样的符号应为1,但mb_strwidth/2方法将它们返回为0.5

日本系统是否计算字符串长度的标准方式?或者每个人都只是通过他们的字符串循环并计算与标准宽度规则不匹配的字符?

icc*_*bot 0

所以,我没有找到答案。

我通过逐字迭代并检查每个字符并手动应用客户要求的计数规则来修复它。