Регулярное выражение PHP для API IP-адреса для определения местоположения
Как бы я использовал регулярное выражение для получения информации об IP-адресе в API местоположения
Это API
Http://ipinfodb.com/ip_query.php?ip=74.125.45.100
Мне нужно было бы получить название страны, региона/штата и города.
Я попробовал это:
$ip = $_SERVER["REMOTE_ADDR"];
$contents = @file_get_contents('http://ipinfodb.com/ip_query.php?ip=' . $ip . '');
$pattern = "/<CountryName>(.*)<CountryName>/";
preg_match($pattern, $contents, $regex);
$regex = !empty($regex[1]) ? $regex[1] : "FAIL";
echo $regex;
Когда я выполняю регулярное выражение echo $, я всегда получаю СБОЙ, как я могу это исправить
3 answers
Как и предложил Аарон. Лучше не изобретать велосипед, поэтому попробуйте проанализировать его с помощью simplexml_load_string()
// Init the CURL
$curl = curl_init();
// Setup the curl settings
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 0);
// grab the XML file
$raw_xml = curl_exec($curl);
curl_close($curl);
// Setup the xml object
$xml = simplexml_load_string( $raw_xml );
Теперь вы можете получить доступ к любой части переменной $xml в качестве объекта, в связи с чем вот пример того, что вы опубликовали.
<Response>
<Ip>74.125.45.100</Ip>
<Status>OK</Status>
<CountryCode>US</CountryCode>
<CountryName>United States</CountryName>
<RegionCode>06</RegionCode>
<RegionName>California</RegionName>
<City>Mountain View</City>
<ZipPostalCode>94043</ZipPostalCode>
<Latitude>37.4192</Latitude>
<Longitude>-122.057</Longitude>
<Timezone>0</Timezone>
<Gmtoffset>0</Gmtoffset>
<Dstoffset>0</Dstoffset>
</Response>
Теперь, после того как вы загрузили эту XML-строку в simplexml_load_string(), вы можете получить доступ к IP-адресу ответа следующим образом.
$xml->IP;
Simplexml_load_string() преобразует правильно сформированные XML-файлы в объект, который вы можете манипулировать. Единственное, что я еще могу сказать, это пойти, попробовать и поиграть с ним
РЕДАКТИРОВАТЬ:
Источник http://www.php.net/manual/en/function.simplexml-load-string.php
Вам действительно лучше использовать анализатор XML для извлечения информации.
Например, этот скрипт проанализирует его в массив.
Регулярное выражение действительно не следует использовать для анализа HTML или XML.
Если вам действительно нужно использовать регулярные выражения, то вам следует исправить то, которое вы используете. "|<CountryName>([^<]*)</CountryName>|i"
будет работать лучше.