grapheme_strlen函数的奇怪行为与一些行结尾

时间:2013-09-19 13:46:33

标签: php string unicode icu intl

任何人都可以在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字符,它只会 。为什么呢?

1 个答案:

答案 0 :(得分:2)

这是一个错误。 grapheme_strlen应该对Unicode Standard Annex #29 (Unicode Text Segmentation)中定义的字形集群边界起作用。标准明确表示不要在CR和LF之间打破。

如果您查看PHP源代码,grapheme_strlen只需returns the number of characters来表示ASCII字符串。