php - 从文件加载 HTML 时保留 utf8

标签 php encoding utf-8 domdocument

显然,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/

相关文章:

php - MySQL - 从 1 开始更新和递增列值,用于基于另一列并按另一列排序的一系列行

java - 在Java中读取UTF-8文件时出错

csv - 文件使用多重编码

c# - 我无法在我的网站上显示阿拉伯语,是否存在编码问题?

c# - 你如何使用 UTF8 编码 mysqldump 特定表?

html - Ruby、Nokogiri : how do i ensure UTF8 throughout nokogiri parsing, erb 模板和编码 HTML 文件

javascript - 无法使用 PHP 的 Froala 编辑器上传图像 URL

php - Laravel 上的图像更新并删除旧图像

php - 只有一条记录带有 TRUNCATE INSERT 查询

django - 在 Django 中使用 UTF-8 编码的 JSON fixture 文件