如果我通过http://api.hostip.info/get_html.php?ip=193.148.1.1访问HostIP地理位置API,则会返回三行文字:
Country: SPAIN (ES)
City: (Unknown city)
IP: 193.148.1.1
如何在PHP中解析该输出以提取国家/地区名称?
答案 0 :(得分:3)
试试这些preg_matches
$info = "Country: SPAIN (ES)
City: (Unknown city)
IP: 193.148.1.1";
preg_match("/Country: (.*)\n/", $info, $out);
echo $out[1];
## OR
preg_match ("/Country: (.*) \(.*\)?\n/", $info, $out);
echo $out[1];
答案 1 :(得分:1)
PHP的一些正则表达式会有用吗?
if (preg_match('/Country: (.*[^\n\r])/i', $subject, $regs)) {
$result = $regs[1];
} else {
$result = "";
}
You will have:
Match 1: Country: SPAIN (ES)
Group 1: SPAIN (ES)
答案 2 :(得分:1)
如果您使用以下网址,则可以从hostip.info获取XML响应:
http://api.hostip.info/?ip=193.148.1.1
而不是:
http://api.hostip.info/get_html.php?ip=193.148.1.1
然后,您可以解析比Regex更清晰的XML,并且可能更加不受输出格式的可能更改的影响。
这是解析输出的一个例子:
$response = file_get_contents('http://api.hostip.info/?ip=193.148.1.1');
$xml = new DOMDocument();
$xml->loadXml($response);
$xpath = new DOMXpath($xml);
$path = '/HostipLookupResultSet/gml:featureMember/Hostip/';
$ip = $xpath->evaluate($path . 'ip')->item(0)->nodeValue;
$city = $xpath->evaluate($path . 'gml:name')->item(0)->nodeValue;
$countryName = $xpath->evaluate($path . 'countryName')->item(0)->nodeValue;
$countryAbbrev = $xpath->evaluate($path . 'countryAbbrev')->item(0)->nodeValue;
答案 3 :(得分:0)
答案 4 :(得分:0)
http://api.hostip.info/get_json.php?position=true
{ “COUNTRY_NAME”: “委内瑞拉”, “COUNTRY_CODE”: “VE”, “城市”: “加拉加斯”, “IP”: “xxx.xx.xxx.xx”, “LAT”:“x.xxx ”, “LNG”: “ - xx.xxxx”}
答案 5 :(得分:0)
function _get_country_from_IP($ip) {
$data = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
return $country = isset($data->country) ? $data->country : 'UNKNOWN';
}