任何人都可以在PHP的intl扩展中解释Unicode strlen
函数的奇怪行为吗?
var_dump(grapheme_strlen("a\r\n")); // (ASCII 'a') length: 3
var_dump(grapheme_strlen("の\r\n")); // length: 2
var_dump(grapheme_strlen("\r\n")); // length: 2
似乎grapheme_strlen
计算“\ r \ n”(CR LF,这是用于Windows上行分隔的两个独立代码点)作为单个字形,考虑到名称,这可能是非常合理的函数,但如果行结尾前面有非ASCII字符,它只会 。为什么呢?
答案 0 :(得分:2)
这是一个错误。 grapheme_strlen
应该对Unicode Standard Annex #29 (Unicode Text Segmentation)中定义的字形集群边界起作用。标准明确表示不要在CR和LF之间打破。
如果您查看PHP源代码,grapheme_strlen
只需returns the number of characters来表示ASCII字符串。