我经营一个旨在支持国际数学小组的论坛.我最近把它改为unicode以更好地支持国际角色.在调试此转换时,我发现并非所有unicode字符都被视为有效的X
HTML(相关网站似乎是
http://www.w3.org/TR/unicode-xml/).论坛软件在将帖子呈现给浏览器之前经历的步骤之一是XHTML验证/清理步骤.在那个阶段它应该删除XHTML不喜欢的任何unicode字符似乎是一个合理的想法.
所以我的问题是:
Is there a standard (or best) way of doing this in PHP?
(顺便说一下,论坛是用PHP编写的.)
我想故障安全将是一个简单的str_replace(如果这也是最好的,我是否需要做任何额外的事情以确保它与unicode正常工作?)但这将涉及我必须通过XHTML DTD(或上面-referenced W3 page)仔细找出str_replace的搜索部分列出的字符,所以如果这是最好的方法,有人已经这样做,以便我可以窃取,错误,复制,它?
(顺便说一下,导致问题的字符是U 000C,’formFeed’,(根据W3页面)是有效的HTML但无效的XHTML!)
我找到了一个可以做你想要的功能
phpedit.net.
原文链接:https://www.f2er.com/php/133842.htmlphpedit.net.
/** * Removes invalid XML * * @access public * @param string $value * @return string */ function stripInvalidXml($value) { $ret = ""; $current; if (empty($value)) { return $ret; } $length = strlen($value); for ($i=0; $i < $length; $i++) { $current = ord($value{$i}); if (($current == 0x9) || ($current == 0xA) || ($current == 0xD) || (($current >= 0x20) && ($current <= 0xD7FF)) || (($current >= 0xE000) && ($current <= 0xFFFD)) || (($current >= 0x10000) && ($current <= 0x10FFFF))) { $ret .= chr($current); } else { $ret .= " "; } } return $ret; }