PHP(UTF-8)中的XML输出


XML Output in PHP (UTF-8)

我将按照本教程在我的网页中实现谷歌地图:

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

我的数据库连接一切顺利。我的数据库中的信息具有类似"á,é,í"的字符

当我试图在浏览器中检查XML文件时,它出现了以下错误:

此页面包含以下错误:

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

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

谢谢你的建议!

我的数据库连接一切顺利。我的数据库中的信息具有类似"á,é,í"的字符

请注意这里的小细节:

一方面你写

我的数据库连接一切顺利。

另一方面你写着:

我的数据库中的信息具有类似"á,é,í"的字符

因此,我试图让这里可见的是,数据库连接不是数据库:

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

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

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

如果出现错误,可能会导致意想不到的结果。结果就像你所经历的:

波哥大�.哥伦比亚首都。

(而不是"波哥大。哥伦比亚首都。"

根据经验,我可以告诉你以下关于这个更大的画面:

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

这可能有多种原因。

所以,让我们记住我刚才在上面写的关于数据本身旁边的元数据的内容,并回顾数据库连接:

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

最重要的是,数据库连接允许您作为PHP代码的程序员告诉数据库您期望的编码。

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

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

为此,您需要知道将使用哪个字符编码来提供响应。这是目前网络中最常见的UTF-8。所以告诉你的数据库服务器你想要UTF-8。一切都应该好起来:

  • PHP PDO:字符集,设置名称?(关于堆栈溢出的参考问题)

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

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