【问题标题】:XML file isn't UTF-8 encoded when created in PHP在 PHP 中创建 XML 文件时不是 UTF-8 编码的
【发布时间】:2014-05-05 16:00:08
【问题描述】:

我正在尝试使用 PHP 输出 XML 文件,除了创建的文件不是 UTF-8 编码的文件,它是 ANSI 之外,一切都是正确的。 (我看到当我打开文件并执行另存为...)。 我正在使用

$dom = new DOMDocument('1.0', 'UTF-8');

但我发现非英语字符不会出现在输出中。 我正在寻找解决方案,我尝试先添加

header("Content-Type: application/xml; charset=utf-8");

在 php 脚本的开头,但它说: 文档末尾的额外内容 下面是第一个错误之前的页面渲染。

我尝试了其他一些建议,例如在创建文档时不要包含“UTF-8”,而是单独编写它: $doc->encoding = 'UTF-8'; ,但结果是一样的。

我用过

$doc->save("filename.xml"); 

保存文件,我尝试将其更改为

$doc->saveXML();

但没有出现非英文字符。 有什么想法吗?

【问题讨论】:

  • 您是否尝试过在 FF 或 chrome 浏览器中打开保存的文件?当你得到输出页面时,你的浏览器编码类型是什么?
  • 我很困惑。您是在尝试创建 XML 文件,还是通过 http 返回 XML?您的大部分帖子似乎都是关于创建 XML 文件的,但是您为什么要更改响应标头呢?您实际将这些非英文字符添加到 XML 文档的代码在哪里?
  • 这实际上是我在这里的第一篇文章(也是我的第一个“严肃”应用程序),所以我对问题的错误解释表示歉意。我正在尝试创建一个 XML 文件,并且从数据库添加的数据中包含非英文字符,因此问题更可能出在其他地方,而不是在 php 中,如下面的答案所述。
  • UTF-8 all the way through 的可能重复项

标签: php xml encoding utf-8


【解决方案1】:

ANSI 不是真正的编码。这个词的基本意思是“我的 Windows 计算机配置使用的任何编码”。获得 ANSI 是在某处依赖默认编码的明显标志。

为了生成有效的 UTF-8 输出,您必须为所有 XML 函数提供正确的 UTF-8 输入。最直接的方法是将您的 PHP 源代码保存为 UTF-8,然后只需键入一些非英文字母。如果您从外部源(例如数据库)读取数据,则需要确保完整的工具链正确使用编码。

无论如何,在未公开的软件中使用“另存为”并不是确定文件编码的可靠方法。

【讨论】:

  • 你是对的,当我输入非英文字母作为数据写入 XML 文件时,我得到了它们应该是的。但我正在从外部源读取数据,它是数据库。我正在使用 phpMyAdmin,我确定我将所有字段都设置为 utf8_general_ci。当我导出数据库(到 sql 文件或其他文件)时,它总是包含非英文字符,而且看起来没问题。你能告诉我还有什么需要检查的吗?
  • 以前,我使用new mysqli 连接到数据库,但我已将其更改为mysql_connect 并添加了mysql_set_charset('utf8', $con);。现在 XML 文件中的输出看起来正确。当您提到问题与数据库有关而不是在创建 XML 文件时,您提供了帮助。
猜你喜欢
  • 2015-03-02
  • 2011-05-09
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多