解析查询字符串

问题描述 投票:0回答:7

有没有办法解析这个查询字符串?

$output = 'Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87';

最终,我想将纬度和经度值隔离到单独的变量中,

strtok()
没有达到目的。

php string query-string text-extraction url-parsing
7个回答
8
投票

您不需要为此使用正则表达式;使用

explode()
来拆分字符串,首先按
&
,然后按
=
,您可以使用它来有效地将其解析为将名称映射到值的漂亮小数组。


3
投票
$output='Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87';
parse_str($output, $array);
$latitude = $array['latitude'];

你也可以这样做

parse_str($output);
echo $latitude;

我认为使用数组更好,因为您不会在各处创建变量,如果您不信任输入字符串,这可能会很危险(例如 register_globals)。


2
投票

看起来像是来自 URL,尽管 URL 编码已经消失了。

我赞同使用

explode()
preg_split()
的建议,但您可能也对
parse_str()
感兴趣。

$output = "City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87";
parse_str($output, $results);
$lat = $results['Latitude'];
$lon = $results['Longitude'];

0
投票

我不确定你在代码中到底演示了什么,也许这只是一些拼写错误,“$output”是变量的名称,还是字符串的一部分?

假设它是变量的名称,而您只是忘记在字符串上加引号,那么您有几个选择:


$sliced = explode('&', $output)

这将创建一个包含值的数组:“Country=UNITED STATES(US)”、“City=Scottsdale, AZ”等。


$sliced = preg_split('/[&=]/', $output);

这将创建一个数组,其中交替元素为“变量”及其值:“国家”、“美国”、“城市”、“斯科茨代尔,亚利桑那州”等。


0
投票

您可以执行以下操作:

$output = 'Country=UNITED STATES (US) &City=Scottsdale, AZ &Latitude=33.686 &Longitude=-111.87';

$strs = explode('&', $output);
foreach ($strs as $str) {

   list($var, $val) = explode('=',$str);
   $$var = trim($val);

}

这将为您提供设置为键/值对中的值的变量,例如 $Latitude 和 $Longitude。


0
投票

所有其他答案都是不充分的。这应该每次都有效!

function slice($string, $start){
  $st = $string; $s = $start; $l = strlen($st); $a = func_get_args();
  $e = isset($a[2]) ? $a[2] : $l;
  $f = $e-$s;
  $p = $e < 0 && $s > 0 ? $l+$f : $f;
  return substr($st, $s, $p);
}

-1
投票

我建议你阅读 PHP 帮助中的正则表达式。

© www.soinside.com 2019 - 2024. All rights reserved.