当我在DOMDocument中加载html时,会弄乱字符。
在我的项目中,html源由用户定义,因此其内容可能会有很大差异。
我想找到一种安全的方法来解析来自各种来源的html内容。
通过安全,我主要是指
保持字符串与原件一致
免受无效编码攻击的保护
除非您认为我应该再担心其他问题。
nodeValue
与这种情况下的textContent
相同。
我创建了这个简化的函数来澄清问题:
<?php
function print_content($html)
{
$dom = new DOMDocument();
$dom->loadHTML($html);
$div = $dom->getElementById('cyrillic_bit');
$content = $div->textContent;
print(mb_internal_encoding().' '.$html."\n");
print(mb_detect_encoding($content, 'Windows-1251, UTF-8', true)." ");
print($content."\n");
}
$html = '<div id="cyrillic_bit">Дядо Коледа<br>Error</div>';
print_content($html);
?>
输出为:
UTF-8 <div id="cyrillic_bit">Дядо Коледа<br>Error</div>
UTF-8 ÐÑдо ÐоледаError
我希望成为:
UTF-8 <div id="cyrillic_bit">Дядо Коледа<br>Error</div>
UTF-8 Дядо КоледаError