1

我在 PHP 中有这些代码来执行反向地理编码[从纬度、经度获取地址]:

<?php

$lon = 100.753;
$lat = 13.69362;

$addr = getAddress($lat,$lon);

echo "Address: ".$addr;

function getAddress($RG_Lat,$RG_Lon)
{
  $json = "http://nominatim.openstreetmap.org/reverse?format=json&lat=".$RG_Lat."&lon=".$RG_Lon."&zoom=27&addressdetails=1";
  $jsonfile = file_get_contents($json);
  $RG_array = json_decode($jsonfile,true);

  foreach ($RG_array as $name => $value)
  {
      if($name == "display_name")
      {
          $RG_address = $value;
          break;
      }
  }

  return $RG_address;
}
?>

结果是这样的字符串:

Short term parking, ท่าอาà¸à¸²à¸¨à¸¢à¸²à¸™à¸ªà¸¸à¸§à¸£à¸£à¸“ภูมิ, สมุทรปราà¸à¸²à¸£, จังหวัดสมุทรปราà¸à¸²à¸£, ราชอาณาจัà¸à¸£à¹„ทย

我将此字符串保存到mysql数据库中,字段类型为utf8_general_ci。

我的问题是,从数据库中取出这个字符串后,如何在网络上以泰语字符正确显示这个字符串?

仅供参考,泰语字符的实际地址是这样的:

Short term parking, ท่าอากาศยานสุวรรณภูมิ, Samut Prakan, Samut Prakan Province, Thailand

谢谢你。

4

1 回答 1

1

似乎您首先存储了错误的字符串,因为您没有正确解码它。如果您在浏览器中查看查询结果,您会看到结果包含 unicode 转义序列,例如\u0e17\u0e48\u0e32\u0e2d。这些序列必须首先被解码。如果您将它们输入到http://rishida.net/tools/conversion/之类的网络转换器中,您将开始看到正确的字符。在将字符串存储到数据库之前,您必须执行类似的转换。

于 2013-09-26T08:16:28.343 回答