使用 PHP 的 intl (ICU) 功能检查有效的字符串编码
使用 PHP ICU 的 intl 包装器中当前可用的功能,您将如何检查字符串编码的有效性? (例如检查有效的 UTF-8)
我知道可以使用 mbstring、inov() 和 PCRE 来完成,但我对这个问题特别感兴趣。
Using the features currently available in PHP's intl wrapper for ICU, how would you go about checking for validity of a string's encoding? (e.g. check for valid UTF-8)
I know it can be done with mbstring, iconv() and PCRE but I'm specifically interested in intl with this question.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
从 PHP 5.5 开始可以使用 UConverter。该手册不存在。请参阅 https://wiki.php.net/rfc/uconverter 了解 API。
UConverter can be used Since PHP 5.5. The manual doesn't exist. See https://wiki.php.net/rfc/uconverter for API.
我做了一些挖掘,发现了 ICU unorm2_normalize() 文档。它的 pErrorCode out 参数很有趣。标准 ICU 错误代码从 utypes.h 的第 620 行左右开始。所以我尝试了这个测试脚本:
所以我想基于此的测试并寻找以下三个错误代码将是不良 UTF-8 编码的良好指示:
或者当我感到懒惰时,我可以使用
顺便说一句:我对 ICU API 规范的这一行感到困惑:
“函数立即返回”短语鼓励重新执行我的测试,但“函数”是否指的是 unorm2_normalize() 或 U_SUCCESS()?有什么想法吗?
I did some digging and found ICU unorm2_normalize() documentation. Its pErrorCode out parameter is interesting. The standard ICU error codes start around line 620 of utypes.h. So I tried this test script:
So I guess a test based on that and looking for the following three error codes would be a decent indication of bad UTF-8 encoding:
Or when I'm feeling lazy I could just use
Btw: I'm confused by this line of the ICU API spec:
The "the function returns immediately" phrase is encouraging re performance of my test but does "the function" refer to unorm2_normalize() or U_SUCCESS()? Any ideas?