我经营一个旨在支持国际数学小组的论坛.我最近把它改为unicode以更好地支持国际角色.在调试此转换时,我发现并非所有unicode字符都被视为有效的XHTML(相关网站似乎是http://www.w3.org/TR/unicode-xml/).论坛软件在将帖子呈现给浏览器之前经历的步骤之一是XHTML验证/清洁步骤.似乎是一个合理的想法,在那个阶段它应该删除XHTML不喜欢的任何unicode字符.
所以我的问题是:
在PHP中有没有标准(或最好)的方法?
(顺便说一下,论坛是用PHP编写的.)
我想故障安全将是一个简单的str_replace(如果这也是最好的,我是否需要做任何额外的事情以确保它与unicode正常工作?)但这将涉及我必须通过XHTML DTD(或上述 -引用W3页面)仔细找出要在搜索部分列出的字符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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |