XML 输出 PHP (UTF-8)

XML Output in PHP (UTF-8)

我正在按照本教程将 google 地图实施到我的网页中:

https://developers.google.com/maps/articles/phpsqlajax_v3#createtable

我的数据库连接一切顺利。我的数据库中的信息有像“á,é,í”这样的字符

当我尝试在浏览器中检查 XML 文件时出现此错误:

此页面包含以下错误:

第 1 行第 10 列错误:编码错误 以下是第一个错误之前的页面呈现。

地图上数据显示为:波哥大。哥伦比亚首都。 而不是:波哥大。

多谢指教!

Everything went perfect with my Data Base connection. The information in my Data Base has characters like "á,é,í"

请注意这里的小细节:

一方面你写

Everything went perfect with my Data Base connection.

另一面你写:

The information in my Data Base has characters like "á,é,í"

所以我想在这里显示的是数据库连接不是数据库:

[PHP code] <--- database connection ---> [database server]-+-[data]

数据库连接是服务器和您的程序之间数据流的协商。

编码是元信息,无论您将数据(字符串)传递到哪里,有关编码的元信息要么是对的,要么是错的。

如果错误,可能会导致意想不到的结果。结果如您所见:

Bogot�. Capital de Colombia.

(而不是 "Bogotá. Capital de Colombia."

根据我的经验,我可以告诉你以下关于这个大局的信息:

  1. 浏览器给你 � 字符是一个标志,表明它捕获了一个二进制数据序列,无法从中生成有效的代码点(让我们在这里简称为一个字母)并显示它信很好。相反,它会在菱形中显示问号以表示存在问题。
  2. 这表明 Unicode 编码是预期的,但并未提供。
  3. 根据经验,您输入的是 UTF-8 单字节字符集。

这可能有多种原因。

所以让我们记住我刚刚在数据本身旁边写的关于元数据的内容并查看数据库连接:

[PHP code] <--- database connection ---> [database server]-+-[data]

最重要的是好消息:数据库连接允许您作为 PHP 代码的程序员告诉数据库您期望哪种编码。

然后,当您向数据库服务器请求数据时,数据库服务器会查看它所拥有的数据,并按照您要求的编码对数据进行编码。这不是很好吗?

所以您需要做的就是告诉数据库服务器您期望的字符编码。

为此,您需要知道响应将使用哪种字符编码。现在网络中最常见的是 UTF-8。所以告诉你的数据库服务器你想要 UTF-8。一切都应该没问题:

  • PHP PDO: charset, set names?(Whosebug 上的参考问题)

编辑:看到您的评论:不,您在其中不必要地添加了 utf8_encode 调用。数据库可以为您提供已经正确编码的数据(并且始终正确)。 utf8_encode 适用于 Latin-1 编码字符串,当您的数据与数据库中的数据不同时,它将失败。不要让它太具体,而只需为数据库连接使用正确的参数,你就不用担心了,因为你知道你要求的是哪种编码。

重要原则:只要有可能,就索要你想要的东西,而不是自己创造。