如何使用php最好地删除XHTML认为无效的unicode字符?
发布时间:2020-12-13 17:52:40 所属栏目:PHP教程 来源:网络整理
导读:我经营一个旨在支持国际数学小组的论坛.我最近把它改为unicode以更好地支持国际角色.在调试此转换时,我发现并非所有unicode字符都被视为有效的X HTML(相关网站似乎是 http://www.w3.org/TR/unicode-xml/).论坛软件在将帖子呈现给浏览器之前经历的步骤之一是X
我经营一个旨在支持国际数学小组的论坛.我最近把它改为unicode以更好地支持国际角色.在调试此转换时,我发现并非所有unicode字符都被视为有效的X
HTML(相关网站似乎是
http://www.w3.org/TR/unicode-xml/).论坛软件在将帖子呈现给浏览器之前经历的步骤之一是XHTML验证/清理步骤.在那个阶段它应该删除XHTML不喜欢的任何unicode字符似乎是一个合理的想法.
所以我的问题是:
(顺便说一下,论坛是用PHP编写的.) 我想故障安全将是一个简单的str_replace(如果这也是最好的,我是否需要做任何额外的事情以确保它与unicode正常工作?)但这将涉及我必须通过XHTML DTD(或上面-referenced W3 page)仔细找出str_replace的搜索部分列出的字符,所以如果这是最好的方法,有人已经这样做,以便我可以窃取,错误,复制,它? (顺便说一下,导致问题的字符是U 000C,’formfeed’,(根据W3页面)是有效的HTML但无效的XHTML!)
我找到了一个可以做你想要的功能
phpedit.net. 我将发布归档函数,在PHPEdit.net上归功于ltp: /** * 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |