使用 file_get_contents() / PHP 在 Geolocation 中进行字符编码
Posted
技术标签:
【中文标题】使用 file_get_contents() / PHP 在 Geolocation 中进行字符编码【英文标题】:Character encoding in Geolocation with file_get_contents() / PHP 【发布时间】:2012-04-09 09:11:29 【问题描述】:我这样调用 Google 地理定位服务:
$querystring = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&latlng=".$row['lat'].",".$row['lng'];
$context = stream_context_create(array(
'http' => array(
'timeout' => 10
)
));
$f = file_get_contents($querystring, 0, $context);
$f = json_decode($f);
if(!isset($f->status) || $f->status != 'OK') continue;
$f = $f->results[0];
$location = $f->formatted_address;
然后我将位置插入数据库:
//add the location to the database
$sql = "INSERT INTO `wp_postmeta`
(`meta_id`, `post_id`, `meta_key`, `meta_value`)
VALUES
(
NULL,
'".intval($row['ID'])."',
'location',
'".mysql_real_escape_string($location)."'
)";
if($location) $insert = mysql_query($sql);
问题:当我编辑 wordpress 帖子时,有些字符显示不好。 比如像 “R. Hilário Riberio,41-243 - Praça da Bandeira,里约热内卢,20270-180,巴西” 应该 “R. Hilário Riberio, 41-243 - Praça da Bandeira, Rio de Janeiro, 20270-180, 巴西”
我在网站上使用 UTF-8 作为字符编码。但这无关紧要,因为 phpMyAdmin 显示输入数据库的数据也带有损坏的字符。
如何设置正确的字符编码?
【问题讨论】:
【参考方案1】:使用mysql_set_charset
将数据库连接编码 设置为'utf8'
,否则MySQL 不知道您正在插入UTF-8 编码的数据。如需更多信息,请参阅Handling Unicode in a Web App。
【讨论】:
【参考方案2】:试试这个:
首先,让我们检查一下您的 PHP+浏览器是否与 UTF-8 一起正常工作,以便调试真正的问题。将其放入您的 PHP 文件并在浏览器中进行测试:
echo 'Filosofía: φιλοσοφία';
您应该能够像这里显示的那样阅读它(西班牙语和希腊语)
一旦您确定 UTF-8 工作正常,输出您的 $f
数组的内容:
echo "<pre>\n" . print_r($f, true) . "\n</pre>";
检查内容是否乱码。
确保告诉 MySQL 你想使用 UTF-8:
mysql_set_charset('utf8');
将其放在mysql_connect()
函数之后。
【讨论】:
测试 #1 可以提供帮助,但它不是 100% 可靠的。我见过太多现实生活中的案例,其中脚本会在存储数据之前损坏数据,并在显示之前完美地“清除”它。以上是关于使用 file_get_contents() / PHP 在 Geolocation 中进行字符编码的主要内容,如果未能解决你的问题,请参考以下文章
使用 file_get_contents 并使用内容的特定部分
Laravel ErrorException 使用 file_get_contents()