在Googlemap API地理编码中查询中国地址

发布于 2024-08-20 00:12:08 字数 861 浏览 11 评论 0原文

我按照 phpsqlgeocode.html 文章中的演示代码

在数据库中插入了一些中文地址,这些地址是 utf-8 编码的。我 urlencode后发现中文地址,输出该地址 会错的。像这样:

http://maps.google.com.tw/maps/geo?output=csv&key=ABQIAAAAfG3KxFZXjEslq8VNxMBpKRR08snBovzCxLQZ9DWwpnzxH-ROPxSAS9Q36m-6OOy0qlwTL6Ht 9qp87w&q=%3F% 3F%3F%3F%3F%3F%3F%3F%3F132%3F

然后它输出 200,5,59.3266963,18.2733433 (我无法通过 PHP 查询,而是通过浏览器查询)。

这个地址其实是位于台湾台中市,但事实证明是 在欧洲瑞典。但是当我粘贴中文地址时(例如台中市西屯区智惠) 街131巷56号58号60号)在url中,结果竟然没问题!

如何确保它发出的是中文原版 地址?如何避免 urlencode()?我发现删除 urlencode() 不会改变任何内容。

(我已将 MAPS_HOST 从maps.google.com 更改为 地图.google.com.tw。) (我确定我的密钥是对的,其他英文地址地理编码是 美好的。)

I'm following the demo code from article of phpsqlgeocode.html

In the db, I inserted some Chinese addresses, which are utf-8 encoded. I
found after urlencode the Chinese address, the output of the address
would be wrong. Like this one:

http://maps.google.com.tw/maps/geo?output=csv&key=ABQIAAAAfG3KxFZXjEslq8VNxMBpKRR08snBovzCxLQZ9DWwpnzxH-ROPxSAS9Q36m-6OOy0qlwTL6Ht9qp87w&q=%3F%3F%3F%3F%3F%3F%3F%3F%3F132%3F

Then it outputs 200,5,59.3266963,18.2733433 (I can't query this through PHP, but through the browser instead).

This address is actually located in Taichung, Taiwan, but it turns out to be
in Sweden, Europe. But when I paste the Chinese address(such as 台中市西屯區智惠
街131巷56號58號60號) in the url, the result turns out to be fine!

How do I make sure it sends out the original Chinese
address? How do I avoid urlencode()? I found that removing urlencode() doesn't change anything.

(I've change the MAPS_HOST from maps.google.com to
maps.google.com.tw.)
(I'm sure my key is right, and other English address geocoding are
fine.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦醒灬来后我 2024-08-27 00:12:08
q=%3F%3F%3F%3F%3F%3F%3F%3F%3F132%3F

解码为:

?????????132?

因此在 URL 编码之前某些内容已经损坏了字符串。如果您尝试将中文字符转换为不支持中文字符的编码(例如 Latin-1),则可能会发生这种情况。

您需要确保在您的应用程序中一致地使用 UTF-8。特别是,您需要确保数据库中的表使用 UTF-8 字符集存储;在 MySQL 术语中,是 UTF-8 排序规则。 MySQL 的默认排序规则为 Latin-1。您还需要通过调用 1mysql_set_charset('utf-8')` 确保与数据库的连接使用 UTF-8。

(我从你的问题猜测你正在使用 PHP。)

q=%3F%3F%3F%3F%3F%3F%3F%3F%3F132%3F

decodes to:

?????????132?

so something has corrupted the string already before URL-encoding. This could happen if you try to convert the Chinese characters into an encoding that doesn't support Chinese characters, such as Latin-1.

You need to ensure that you're using UTF-8 consistently through your application. In particular you will need to ensure the tables in the database are stored using a UTF-8 character set; in MySQL terms, a UTF-8 collation. The default collation for MySQL otherwise is Latin-1. You'll also want to ensure your connection to the database uses UTF-8 by calling 1mysql_set_charset('utf-8')`.

(I am guessing from your question that you're using PHP.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文