关于Maxmind的GeoLite2 Continent code

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (717)

我正在使用MaxMind的免费GeoLite2数据库。 根据他们的代码,我可以获得该国家的ISO代码。 print($record->country->isoCode . "\n"); // 'US' 但是我如何获得continent code?

提问于
用户回答回答于

EU

欧盟(欧盟)国家名单如下:

  • 奥地利
  • 比利时
  • 保加利亚
  • 克罗地亚
  • 塞浦路斯共和国
  • 捷克共和国
  • 丹麦
  • 爱沙尼亚
  • 芬兰
  • 法国
  • 德国
  • 希腊
  • 匈牙利
  • 爱尔兰
  • 意大利
  • 拉脱维亚
  • 立陶宛
  • 卢森堡
  • 马耳他
  • 荷兰
  • 波兰
  • 葡萄牙
  • 罗马尼亚
  • 斯洛伐克
  • 斯洛文尼亚
  • 西班牙
  • 瑞典
  • 英国

EEE

根据您的目标(考虑到GDPR可以强制执行后的问题),您可能希望测试EEA(欧洲经济区)。

欧洲经济区是:

  • 所有欧盟成员国
  • 挪威
  • 冰岛
  • 列支敦士登

这是我使用完整的geoip:

if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
  $cc=$_SERVER['GEOIP_COUNTRY_CODE'];
} else {
  $cc='??';
}
$eea=array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'SP', 'SE', 'GB', 'NO', 'IS', 'LI');
if (in_array($cc,$eea)) {
   //inside EEA
} else {
   //outside EEA
}

如果你不想检测欧洲经济区,而是欧盟:

if (isset($_SERVER['GEOIP_COUNTRY_CODE'])) {
  $cc=$_SERVER['GEOIP_COUNTRY_CODE'];
} else {
  $cc='??';
}
$eu=array('AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'SP', 'SE', 'GB');
if (in_array($cc,$eu)) {
   //inside EU
} else {
   //outside EU
}

特别案例

欧盟的一部分,但有自己的ISO 2字母代码

您需要处理一些特殊情况,这些特殊情况取决于您的预期用途是否包括在内:

  • GI,直布罗陀(〜英国)
  • AX,奥兰群岛(〜芬兰)

请注意,有更多这些,但他们没有自己的ISO国家代码...

欧盟和欧洲经济区的这些部分,并有自己的2个字母的国家代码。

最外地区

  • GF,法属圭亚那(〜法国)
  • GP,瓜德罗普岛(〜法国)
  • MQ,马提尼克岛(〜法国)
  • YT,马约特岛(〜法国)
  • RE,会议(〜法国)
  • MF,圣马丁(〜法国)

它变得复杂,你应该真正阅读每一个因为你寻求定义欧盟的具体原因,如果它们进入或退出。还要注意,这些往往会改变。

海外国家和地区

其中甚至更多,但它们不应被视为欧盟的一部分。

飞地

这些往往没有自己的国家代码,但有时出于某些目的,可以对它们应用不同的规则。

EFTA

完整性:瑞士(CH)既不是欧盟成员国也不是欧洲经济区成员国,但它是欧洲自由贸易联盟(EFTA)的成员。

微观状态

列支敦士登是欧洲经济区的成员,但是其他一些既不属于欧盟也不属于欧洲经济区,但确实有各种关系(例如成为欧元区的一部分,在申根区内,收取增值税等。 )

  • AD,安道尔
  • LI,列支敦士登
  • MC,摩纳哥
  • SM,圣马力诺
  • VC,梵蒂冈城

大陆

如果你确实在寻求大陆,你将需要增加更多的国家,你将不得不与不仅仅在欧洲的国家(如土耳其,俄罗斯)打交道。

Maxmind的“欧盟”国家代码

Maxmind有时会使用国家代码“EU”,因为它无法确定它实际上是哪个国家/地区。这个“欧盟”指的是欧洲,而不是欧盟(欧盟国家代码实际上是保留的)。

用户回答回答于

如果您只是在寻找该国是否是欧盟成员国,MaxMind

$record->country->isInEuropeanUnion

如果你想要continent code,你可以:

$record->continent->code

但请注意,并非所有欧洲国家都是欧盟的一部分。

扫码关注云+社区

领取腾讯云代金券