如何使用Zend将国家/地区字符串转换为ISO 3166-1代码?

时间:2010-07-06 13:23:08

标签: php zend-framework zend-locale

如果您将国家/地区名称作为字符串,是否有人知道是否可以使用Zend_Locale获取国家/地区的ISO 3166-1代码? 例如,我有“荷兰”,所以我想得到“NL”。

4 个答案:

答案 0 :(得分:3)

我不知道Zend是否有适合自己的东西,但你自己也很容易做到。

This tutorial显示了如何以XML格式获取最新的ISO 3166-1国家/地区代码列表,解析它,然后创建一个PHP文件,当您需要国家/地区代码转换数组时可以包含该文件: / p>

$str = file_get_contents('http://opencountrycodes.appspot.com/xml/');
$xml = new SimpleXMLElement($str);
$out = '$countries'." = array(\n";
foreach ($xml->country as $country)
{
    $out .= "'{$country['code']}' => \"{$country['name']}\",\n";
}
$out .= ");";

file_put_contents('country_names.php', $out);

或者,您可以将其另存为CSV文件并使用PHP的fgetcsv() function加载它。这可能是IMO的首选。或者,哎呀,你可以保存XML并在加载时解析它。

答案 1 :(得分:3)

我不确定如何在Zend HTTp调用中进行调用,但这可能是一个很好的参考资源。

使用Yahoo!的Geo数据,允许将自由格式字符串映射到WOE ID。对于国家,WOE Ids是ISO 3166-1代码。

要将自由格式字符串转换为WOE Id,您可以使用GeoPlanet API:http://developer.yahoo.com/geo/geoplanet/

答案 2 :(得分:2)

你应该看一下Zend_Locale :: getTranslation()。您可能会得到一个国家/地区名称列表(简单数组) - 然后您可以使用array_search()来获取所需的“国家/地区密钥”!

答案 3 :(得分:2)

我已在以下网址上制作了最新的国家/地区名称和ISO 3166国家/地区代码:

https://github.com/johannesl/Internationalization

您可以使用它来转换name =>国家代码和反向。

我还创建了一个将出现在github上的常见国家别名的集合。