加载HTML字符串时,utf8
字符有变通方法 - $dom->loadHTML()
。
显然,从文件加载HTML时我没有办法做到这一点 - $dom->loadHTMLFile()
。虽然它从<meta />
标签读取和设置编码,但如果我没有定义那些问题,则会出现问题。例如,在加载HTML片段(模板部分,如footer.html
)时,不是完全构建的HTML文档。
那么,如何在从文件加载HTML时保留utf8字符,但是没有<meta />
个密钥存在,并且定义它们不是一个选项?
footer.html(文件以UTF-8编码,没有BOM):
<div id="footer">
<p>My sūpēr ōzōm ūtf8 štrīņģ</p>
</div>
的index.php:
$dom = new DOMDocument;
$dom->loadHTMLFile('footer.html');
echo $dom->saveHTML(); // results in all familiar effed' up characters
提前致谢!
答案 0 :(得分:6)
尝试像这样的黑客攻击:
$doc = new DOMDocument();
$doc->loadHTML('<?xml encoding="UTF-8">' . $html);
// dirty fix
foreach ($doc->childNodes as $item)
if ($item->nodeType == XML_PI_NODE)
$doc->removeChild($item); // remove hack
$doc->encoding = 'UTF-8'; // insert proper
此处的用户评论中列出了其他几个:http://php.net/manual/en/domdocument.loadhtml.php。同样重要的是,您的文档头包含一个元标记,用于直接在标记之后指定编码FIRST。
答案 1 :(得分:5)
我建议在这里使用我的答案:https://stackoverflow.com/a/12846243/816753而不是添加另一个<head>
,将整个片段包装在
<html>
<head><meta http-equiv='Content-type' content='text/html; charset=UTF-8' /></head>
<body><!-- your content here --></body>
</html>`
答案 2 :(得分:4)
虽然我不确定如何使用->loadHTMLFile()
解决问题,您是否考虑使用file_get_contents()
获取HTML,在该字符串上运行mb_convert_encoding()
,然后通过该值是->loadHTML()
?
编辑:此外,当您 initialize DOMDocument 时,您是否在给它$ encoding参数?
答案 3 :(得分:3)
密钥仅适用于您的浏览器。页面全部构建完毕后,如果页面末尾有元数据,则浏览器应正确显示页面。
你可以尝试使用utf8_decode(或编码,我永远不会确定lol)函数,然后回显数据:
echo utf8_decode($dom->saveHTML());