在PHP中,我们可以mb_check_encoding()用来确定字符串是否是有效的UTF-8.但这不是一个可移植的解决方案,因为它需要编译和启用mbstring扩展.此外,它不会告诉我们哪个字符无效.
是否有正则表达式(或其他100%可移植方法)可以匹配给定字符串中的无效UTF-8字节.这样,如果需要,可以替换这些字节(保留二进制信息,例如在构建包含二进制数据的测试输出xml文件时).因此,将字符转换为UTF-8将丢失信息.所以,我们可能想转换:
"foo" . chr(128) . chr(255)
Run Code Online (Sandbox Code Playgroud)
成
"foo<128><255>"
Run Code Online (Sandbox Code Playgroud)
所以只是"检测"字符串不够好,我们需要能够检测哪些字符无效.
用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含选项卡的rtf文件中进行复制和粘贴。
如何检查字符串是否为有效的UTF-8?