显然,PHP 及其标准库存在一些问题,DOMDocument 也不异常(exception)。
utf8
有变通办法加载 HTML 字符串时的字符 - $dom->loadHTML()
.
显然,从文件加载 HTML 时,我还没有找到执行此操作的方法 - $dom->loadHTMLFile()
.当它从 <meta />
读取并设置编码时标签,如果我没有定义它们,问题又来了。例如,当加载 HTML 片段(模板部分,如 footer.html
)时,而不是完整构建的 HTML 文档。
那么,我如何保留 utf8 字符,当从文件加载 HTML 时,还没有得到它的 <meta />
键存在,并且定义这些不是一个选项?
更新
footer.html(该文件以无 BOM 的 UTF-8 编码):
<div id="footer">
<p>My sūpēr ōzōm ūtf8 štrīņģ</p>
</div>
索引.php:
$dom = new DOMDocument;
$dom->loadHTMLFile('footer.html');
echo $dom->saveHTML(); // results in all familiar effed' up characters
提前致谢!
最佳答案
试试这样的 hack:
$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,紧跟在标记之后。
关于php - 从文件加载 HTML 时保留 utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8344585/