jol*_*olt 4 php encoding utf-8 domdocument
好吧,显然,PHP及其标准库存在一些问题,DOMDocument也不例外.
utf8加载HTML字符串时有字符的变通方法- $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>
Run Code Online (Sandbox Code Playgroud)
index.php文件:
$dom = new DOMDocument;
$dom->loadHTMLFile('footer.html');
echo $dom->saveHTML(); // results in all familiar effed' up characters
Run Code Online (Sandbox Code Playgroud)
提前致谢!
尝试像这样的黑客:
$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
Run Code Online (Sandbox Code Playgroud)
用户评论中列出了其他几个:http://php.net/manual/en/domdocument.loadhtml.php.同样重要的是,您的文档头包含一个元标记,用于直接在标记之后指定编码FIRST.
小智 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>`
Run Code Online (Sandbox Code Playgroud)