PHP从字符串中剥离非sgml字符


PHP strip non-SGML characters from a string?

我的数据库中出现了非标准字符(由于换行)。

我的HTML验证器正在抱怨它们。

因为我的HTML验证器是我自我的直接扩展,所以我想让它保持愉快和绿色。

以前做过这个的人有快速修复吗?

顺便说一句,我不想改变页面的字符集,文档类型或数据。只是寻找一个utf8_decode()类型的东西,将清理字符串,但utf8_encode()utf8_decode()不工作…

对不起,"非标准字符"有点模糊,但这个错误警告也是如此。具体来说,它们是而不是 SGML字符,显然不适合SGML解析器…但现在我进入了模糊的领域,不知道发生了什么。

如果您所说的非标准字符是指XHTML验证器在文档中看到XML规范不允许的字符,在这里:http://www.w3.org/TR/xml/#charsets,那么您的解决方案是使用XML实体来转义它们。例如,如果您有非法字符U+0004,那么您可以在PHP中将其转换为,然后再将其写出来。

如果通过非标准字符,您的意思是您的字节序列被破坏到不是UTF-8的合法字节序列(即,它不能被解码),那么您的应用程序中存在逻辑错误。也许你正在读取字节,而不是要求PHP读取字符并正确编码。

编辑:对于上面关于非法字符为30的评论,这在XML和XHTML中确实是一个非法字符。如果您希望它们是换行符,那么使用php regex替换将'x1E替换为'n