【发布时间】:2010-12-31 14:58:12
【问题描述】:
我有这段文字
"?foo=bar&foobar=barfoo"
将此文本转换为变量的最佳方法是什么?像这样:
<?php
echo $q['foo']; //bar
echo $q['foobar']; //barfoo
?>
谢谢。
【问题讨论】:
我有这段文字
"?foo=bar&foobar=barfoo"
将此文本转换为变量的最佳方法是什么?像这样:
<?php
echo $q['foo']; //bar
echo $q['foobar']; //barfoo
?>
谢谢。
【问题讨论】:
见http://docs.php.net/parse_str和http://docs.php.net/parse_url
$s = "?foo=bar&foobar=barfoo";
parse_str(parse_url($s, PHP_URL_QUERY), $q);
var_dump($q);
打印
array(2) {
["foo"]=>
string(3) "bar"
["foobar"]=>
string(6) "barfoo"
}
编辑:如果您知道字符串始终具有 ?x=y... 的形式,您可能想跳过 parse_url() 并改用 substr()。
编辑2:请记住,parse_str() 的行为取决于arg_separator.input 的值。您是否应该(无论出于何种原因)将其设置为“!” parse_string() 将为您的输入字符串返回 NULL。
例如
ini_set('arg_separator.input', '!');
$s = "foo=bar&foobar=barfoo";
var_dump(parse_str($s));
打印NULL。但是……那将是一个相当奇怪的设置。
【讨论】:
这是一个 url,所以如果你从一个 url 源获取它,它们应该自动在 $_GET['foo'] 和 $_GET['bar'] 但如果它只是一个文本字符串,你可以这样做:
$string = "?foo=bar&foobar=barfoo";
$string = str_replace('?', '', $string);
$params = explode('&', $string);
foreach($params as $key=>$value)
{
$data = explode('=', $value);
$_GET[$data[0]] = $data[1];
}
您所有的变量都将在 $_GET 数组中。
【讨论】: