加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何使用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字符似乎是一个合理的想法.

所以我的问题是:

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.

我将发布归档函数,在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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读