Maxmind 的 GeoLite2 Continent 代码
Maxmind's GeoLite2 Continent code
我正在使用 MaxMind 的免费 GeoLite2 database。
根据他们code,我可以得到国家的ISO编码。
print($record->country->isoCode . "\n"); // 'US'
但是我如何获得大陆代码?
我更具体地寻找欧盟检测。
欧盟
EU(欧盟)国家列表为:
- 奥地利,奥地利
- 比利时,比利时
- BG,保加利亚
- CR,克罗地亚
- 塞浦路斯共和国 CY
- 捷克共和国
- DK,丹麦
- EE,爱沙尼亚
- FI,芬兰
- 法国,法国
- 德国,德国
- GR,希腊
- HU,匈牙利
- IE,爱尔兰
- IT,意大利
- LV,拉脱维亚
- LI,立陶宛
- LU,卢森堡
- MT,马耳他
- NL,荷兰
- PL,波兰
- 葡萄牙,葡萄牙
- RO,罗马尼亚
- SK,斯洛伐克
- SI,斯洛文尼亚
- SP,西班牙
- SE,瑞典
- 英国,英国
我使用的示例:
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
}
欧洲经济区
根据您要执行的操作(考虑到这是在 GDPR 生效后提出的要求),您可能想要测试 EEA(欧洲经济区)。
欧洲经济区是:
- 所有欧盟成员国
- 不,挪威
- IS,冰岛
- LI,列支敦士登
这是我使用的完整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
}
特例
您需要处理一些特殊情况,这些情况取决于您的预期用途是否包括在内:
欧盟的一部分,但有自己的 ISO 2 字母代码
- GI,直布罗陀(~英国)
- AX,奥兰群岛(~芬兰)
请注意还有更多这些,但它们没有自己的 ISO 国家/地区代码...
欧盟和欧洲经济区的这些部分,有自己的 2 个字母的国家/地区代码。
最外围地区
- GF,法属圭亚那(~法国)
- GP,瓜德罗普岛(~法国)
- MQ,马提尼克岛(~法国)
- YT,马约特岛(~法国)
- RE, 留尼旺 (~法国)
- MF,圣马丁(~法国)
这些变得很复杂,你真的应该仔细阅读每一个你寻求定义欧盟的具体原因,无论它们是在还是在外面。另请注意,这些有时会在没有太多媒体报道的情况下发生变化。
海外国家和地区
还有更多这些,但对于大多数用例而言,它们不应被视为欧盟的一部分,如果您有特定原因,请务必查看它们。
飞地
这些往往没有自己的国家代码,但有时出于某些目的,它们可能会应用不同的规则。
示例是例如的独立部分德国或西班牙,但位于内部,例如瑞士或摩洛哥。
欧洲自由贸易区
为了完整起见:瑞士 (CH) 既不是欧盟成员,也不是欧洲经济区成员,但它是 EFTA(欧洲自由贸易联盟)的成员。
微州
列支敦士登是欧洲经济区的成员,但还有一些国家既不属于欧盟也不属于欧洲经济区。尽管如此,出于实际原因,他们确实有各种关系
与欧盟(例如成为欧元区的一部分、在申根区内、征收增值税等)
- 公元,安道尔
- LI,列支敦士登
- MC,摩纳哥
- SM,圣马力诺
- VC,梵蒂冈城
大陆
如果您确实要寻找大陆,则需要添加更多的国家/地区,并且您将不得不处理不仅仅在欧洲的国家/地区(例如土耳其、俄罗斯)。
Maxmind 的 "EU" 国家代码
当 Maxmind 无法确定它实际是哪个国家时,有时会使用国家代码 "EU"。 "EU"指的是欧洲,而不是欧盟(实际上保留了欧盟国家代码)。
更多信息:
https://en.wikipedia.org/wiki/Special_member_state_territories_and_the_European_Union
https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
https://en.wikipedia.org/wiki/Microstates_and_the_European_Union
https://dev.maxmind.com/faq/what-are-the-eu-europe-and-ap-asia-pacific-entries/
如果您只是想查询该国家/地区是否是欧盟成员国,MaxMind provides this:
$record->country->isInEuropeanUnion
如果您想要 continent code,您可以通过以下方式获得:
$record->continent->code
但是,请注意并非所有欧洲国家都是欧盟的一部分。
我正在使用 MaxMind 的免费 GeoLite2 database。
根据他们code,我可以得到国家的ISO编码。
print($record->country->isoCode . "\n"); // 'US'
但是我如何获得大陆代码?
我更具体地寻找欧盟检测。
欧盟
EU(欧盟)国家列表为:
- 奥地利,奥地利
- 比利时,比利时
- BG,保加利亚
- CR,克罗地亚
- 塞浦路斯共和国 CY
- 捷克共和国
- DK,丹麦
- EE,爱沙尼亚
- FI,芬兰
- 法国,法国
- 德国,德国
- GR,希腊
- HU,匈牙利
- IE,爱尔兰
- IT,意大利
- LV,拉脱维亚
- LI,立陶宛
- LU,卢森堡
- MT,马耳他
- NL,荷兰
- PL,波兰
- 葡萄牙,葡萄牙
- RO,罗马尼亚
- SK,斯洛伐克
- SI,斯洛文尼亚
- SP,西班牙
- SE,瑞典
- 英国,英国
我使用的示例:
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
}
欧洲经济区
根据您要执行的操作(考虑到这是在 GDPR 生效后提出的要求),您可能想要测试 EEA(欧洲经济区)。
欧洲经济区是:
- 所有欧盟成员国
- 不,挪威
- IS,冰岛
- LI,列支敦士登
这是我使用的完整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
}
特例
您需要处理一些特殊情况,这些情况取决于您的预期用途是否包括在内:
欧盟的一部分,但有自己的 ISO 2 字母代码
- GI,直布罗陀(~英国)
- AX,奥兰群岛(~芬兰)
请注意还有更多这些,但它们没有自己的 ISO 国家/地区代码...
欧盟和欧洲经济区的这些部分,有自己的 2 个字母的国家/地区代码。
最外围地区
- GF,法属圭亚那(~法国)
- GP,瓜德罗普岛(~法国)
- MQ,马提尼克岛(~法国)
- YT,马约特岛(~法国)
- RE, 留尼旺 (~法国)
- MF,圣马丁(~法国)
这些变得很复杂,你真的应该仔细阅读每一个你寻求定义欧盟的具体原因,无论它们是在还是在外面。另请注意,这些有时会在没有太多媒体报道的情况下发生变化。
海外国家和地区
还有更多这些,但对于大多数用例而言,它们不应被视为欧盟的一部分,如果您有特定原因,请务必查看它们。
飞地
这些往往没有自己的国家代码,但有时出于某些目的,它们可能会应用不同的规则。
示例是例如的独立部分德国或西班牙,但位于内部,例如瑞士或摩洛哥。
欧洲自由贸易区
为了完整起见:瑞士 (CH) 既不是欧盟成员,也不是欧洲经济区成员,但它是 EFTA(欧洲自由贸易联盟)的成员。
微州
列支敦士登是欧洲经济区的成员,但还有一些国家既不属于欧盟也不属于欧洲经济区。尽管如此,出于实际原因,他们确实有各种关系 与欧盟(例如成为欧元区的一部分、在申根区内、征收增值税等)
- 公元,安道尔
- LI,列支敦士登
- MC,摩纳哥
- SM,圣马力诺
- VC,梵蒂冈城
大陆
如果您确实要寻找大陆,则需要添加更多的国家/地区,并且您将不得不处理不仅仅在欧洲的国家/地区(例如土耳其、俄罗斯)。
Maxmind 的 "EU" 国家代码
当 Maxmind 无法确定它实际是哪个国家时,有时会使用国家代码 "EU"。 "EU"指的是欧洲,而不是欧盟(实际上保留了欧盟国家代码)。
更多信息:
https://en.wikipedia.org/wiki/Special_member_state_territories_and_the_European_Union https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 https://en.wikipedia.org/wiki/Microstates_and_the_European_Union https://dev.maxmind.com/faq/what-are-the-eu-europe-and-ap-asia-pacific-entries/
如果您只是想查询该国家/地区是否是欧盟成员国,MaxMind provides this:
$record->country->isInEuropeanUnion
如果您想要 continent code,您可以通过以下方式获得:
$record->continent->code
但是,请注意并非所有欧洲国家都是欧盟的一部分。