【发布时间】:2014-07-05 23:14:05
【问题描述】:
我正在处理一堆文本/html 文档
其中一些包含编码的 html 实体,我试图将其转换为原始解码的 utf 字符。
这很容易使用html_entity_decode,但是有些实体是无效的,例如
򙦙
出于这个原因,我使用正则表达式来提取每个单独的实体,然后尝试以某种方式验证它们。
如果实体无效,我想在文档中将其保留为 򙦙,但编码后的 & 之类的内容仍会变为 &。
只是我敲出的一些示例测试代码..
<?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, ENT_QUOTES, "UTF-8") . "] ";
echo "Decoded: [" . $decoded . "] ";
echo "Hex: [" . bin2hex($decoded) . "] ";
echo "detect: [" . mb_detect_encoding($decoded) . "]";
echo "<br>";
}
}
}
$payload = "" & ͉ ’ 򙦙";
echo "<html><head><meta charset='UTF-8'></head><body>";
dump_chars($payload);
我正在画一个空白如何最好地验证实体,希望得到一些帮助。
【问题讨论】:
标签: php html-entities iconv