首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么grapheme_extract不为"\r\n“提取任何内容?

为什么grapheme_extract不为"\r\n“提取任何内容?
EN

Stack Overflow用户
提问于 2019-10-15 12:03:04
回答 1查看 114关注 0票数 1

在使用循环中的grapheme_extract来转义字符串以进行调试输出的函数中调试一个没完没了的循环时,我注意到对于字符串"\r\n",没有返回代码点$cp,也没有更新$next指针。

这是一个错误还是某个有文档记录的特性(没有找到任何关于它的东西)?

是否有其他字符串已知被grapheme_extract忽略?

最小测试用例:

代码语言:javascript
复制
$next = 0;
$cp = grapheme_extract("\r\n", 1, GRAPHEME_EXTR_MAXCHARS, 0, $next);
echo implode('_', [strlen($cp), $next]);

结果:0_0,预期:1_1

PHP: 7.3.9和7.2.22,x64,Linux

grapheme_extract为所有其他测试的非空字符串(包括"\0""\r\r""\n\n")识别第一个字节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 03:03:31

我四处兜圈子,得出了这样的结论:grapheme_extract确实不是为我尝试使用它而设计的。

GRAPHEME_EXTR_MAXCHARS只为长度限制更改输出字符串的粒度。

抽取粒度始终是输入字符串中的一个字素聚类。

"\r\n"中的两个代码点本身就是有效的集群,但它们作为一个单独的提取单元被处理,因为它们出现在输入字符串中,因此由Unicode字素簇分离规则形成一个单独的集群。

修正最小测试用例:

代码语言:javascript
复制
$next = 0;
$cp = mb_substr("\r\n", $next++, 1, 'UTF-8');
echo implode('_', [strlen($cp), $next]);

结果:1_1如预期

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58394247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档