有人能解释一下strlen扩展中Unicode函数的这种奇怪行为吗?
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,这是在Windows上用于行分隔的两个单独的代码点)计算为一个单独的字素,考虑到函数的名称,这是相当合理的,但是如果行结束前有一个非ASCII字符,它只会。为什么?
发布于 2013-09-19 15:34:29
这是个窃听器。grapheme_strlen应该在Unicode标准附件29 (Unicode文本分割)中定义的字形簇边界上工作。标准明确规定不能打破CR和LF之间的界限。
如果您看一下PHP源代码,grapheme_strlen只是返回字符数。用于ASCII字符串。
https://stackoverflow.com/questions/18896428
复制相似问题