PHP从字符串中剥离非SGML字符?

时间:2011-07-12 03:07:30

标签: php character-encoding validation xhtml-1.0-strict sgml

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

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

由于我的HTML验证器是我自我的直接延伸,我想保持这个事情的快乐和绿色 - 确定 - 箭头y。

之前完成此操作的人是否有快速解决方法?

BTW我不想更改页面的字符集,doctype或数据。只是找一个会清理字符串的utf8_decode()类型的东西,但utf8_encode()utf8_decode()不起作用......

更新

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

1 个答案:

答案 0 :(得分:2)

如果使用非标准字符,则表示XHTML验证程序会在文档中看到XML规范不允许的字符,即http://www.w3.org/TR/xml/#charsets,那么您的解决方案是使用XML实体来转义它们。例如,如果您有非法字符U + 0004,那么您可以在写入之前将其转换为PHP中的

如果使用非标准字符,则表示您的字节序列如此严重,以至于它不是UTF-8的合法字节序列(即,它无法解码),那么您的应用程序中就会出现逻辑错误。也许您正在读取字节而不是要求PHP读取字符并对其进行正确编码。

编辑:回应上面关于非法字符为30的评论,这确实是XML中的非法字符,因此也就是XHTML。如果您打算将它们作为换行符,那么执行php正则表达式替换以将\x1E替换为\n