我将按照本教程在我的网页中实现谷歌地图:
https://developers.google.com/maps/articles/phpsqlajax_v3#createtable
我的数据库连接一切顺利。我的数据库中的信息具有类似"á,é,í"的字符
当我试图在浏览器中检查XML文件时,它出现了以下错误:
此页面包含以下错误:
第1行第10列出现错误:编码错误以下是第一个错误之前的页面呈现。
在地图上,数据显示为:波哥大�.哥伦比亚首都。而不是:波哥大。
谢谢你的建议!
我的数据库连接一切顺利。我的数据库中的信息具有类似"á,é,í"的字符
请注意这里的小细节:
一方面你写
我的数据库连接一切顺利。
另一方面你写着:
我的数据库中的信息具有类似"á,é,í"的字符
因此,我试图让这里可见的是,数据库连接不是数据库:
[PHP code] <--- database connection ---> [database server]-+-[data]
数据库连接是服务器和程序之间的数据流协商。
编码是元信息,无论在哪里传递数据(字符串),关于编码的元信息要么是对的,要么是错的。
如果出现错误,可能会导致意想不到的结果。结果就像你所经历的:
波哥大�.哥伦比亚首都。
(而不是"波哥大。哥伦比亚首都。")
根据经验,我可以告诉你以下关于这个更大的画面:
- 浏览器为您提供�字符是一个符号,表示它捕获了一个二进制数据序列,该序列无法从中生成有效的代码点(这里简称为Letter)并很好地显示该字母。相反,它在菱形中显示问号以表示问题
- 这表明Unicode编码是预期的,但没有给出
- 根据经验,您正在将单字节字符集输入为UTF-8
这可能有多种原因。
所以,让我们记住我刚才在上面写的关于数据本身旁边的元数据的内容,并回顾数据库连接:
[PHP code] <--- database connection ---> [database server]-+-[data]
最重要的是,数据库连接允许您作为PHP代码的程序员告诉数据库您期望的编码。
当你向数据库服务器请求数据时,数据库服务器会查看它所拥有的数据,它会按照你要求的编码方式对数据进行编码。这不是很好吗?
因此,您所需要做的就是告诉数据库服务器您所期望的字符编码。
为此,您需要知道将使用哪个字符编码来提供响应。这是目前网络中最常见的UTF-8。所以告诉你的数据库服务器你想要UTF-8。一切都应该好起来:
- PHP PDO:字符集,设置名称?(关于堆栈溢出的参考问题)
编辑:看到你的评论:不,你在那里添加了不必要的utf8_encode
调用。数据库可以为您提供已经正确编码的数据(并且始终正确)。utf8_encode
仅适用于Latin-1编码的字符串,当您的数据与数据库中的数据不同时,它将失败。不要把它说得太具体,只需为数据库连接使用正确的参数,你就不用担心太多,因为你知道你要求的是哪种编码。
重要原则:只要可能,就要求你想要的东西,而不是自己创造。