如何在PHP中检测无效的html实体?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了如何在PHP中检测无效的html实体?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一堆我正在处理的文本/ htML文档

其中一些包含编码的html实体,我试图将其转换为原始解码的utf字符.

这很容易使用html_entITy_decode,但是,有些实体是无效的,例如

򙦙

出于这个原因,我正在使用正则表达式来提取每个单独的实体,然后尝试以某种方式验证它们.

如果实体无效,我想将其保留为򙦙在文档中,但像编码和放大器的东西;仍然会成为&amp ;.

只是一些示例测试代码我敲了..

<?PHP
function dump_chars($s)
{
    if (preg_match_all('/&[#A-Za-z0-9]+;/',$s,$matches))
    {
        foreach ($matches[0] as $m)
        {
            $decoded = html_entity_decode($m,ENT_QUOTES,"UTF-8");

            echo "[" . htmlentities($m,"UTF-8") . "] ";
            echo "Decoded: [" . $decoded . "] ";
            echo "Hex: [" . bin2hex($decoded) . "] "; 
            echo "detect: [" . mb_detect_encoding($decoded) . "]";
            echo "<br>";
        }
    }
}

$payload = "&quot; &amp; &#x349; &#x92; &#x99999;";
echo "<html><head><Meta charset='UTF-8'></head><body>";
dump_chars($payload);

我对如何最好地验证实体有点空白,请帮忙.

我终于找到了办法……
function decode_numeric_entities($s)
{
    $result = $s;
    $convmap = array(0x0,0x2FFFF,0xFFFF);

    if (PReg_match_all('/&[#A-Za-z0-9]+;/',$matches))
    {
        foreach ($matches[0] as $m)
        {
            $decoded = mb_decode_numericentity($m,$convmap,'UTF-8');
            $result = str_replace($m,$decoded,$result);
        }
    }
    return $result;
}

通过此func运行字符串会将所有有效实体转换为其实际的utf字符,并将所有无效实体保留为实体

脚本宝典总结

以上是脚本宝典为你收集整理的如何在PHP中检测无效的html实体?全部内容,希望文章能够帮你解决如何在PHP中检测无效的html实体?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。