当问号出现时,parse_str不起作用?

时间:2011-01-16 20:29:15

标签: php string variables query-string

为什么当我传递带有'form.php?'之类的字符串时会出现错误,例如,

parse_str('form.php?category=contacts');
echo $category;

我明白了,

Notice: Undefined variable: category in C:\wamp\www\1hundred_2011_MVC\applications\CMS\category_manage.php on line xx

但是,

parse_str('category=contacts');
echo $category;

我得到了我想要的东西,

contacts

我该如何解决?我必须通过'xxx.php?category=contacts'之类的内容来获取变量中的'contacts'或其他内容。

感谢。

3 个答案:

答案 0 :(得分:8)

函数parse_str仅解析查询字符串,而不解析整个URL。尝试使用parse_url并将组件设置为PHP_URL_QUERY,先提取查询字符串,然后使用parse_str

$url_query = parse_url('form.php?category=contacts', PHP_URL_QUERY);
parse_str($url_query, $output);
echo $output['category'];

结果:

contacts

See it at ideone.

答案 1 :(得分:1)

parse_str只接受查询字符串:

$q = 'foo?hello=world';
parse_str($q);
echo ${'foo?hello'}; // outputs 'world'

首先删除网址的开头:

$q = 'foo?hello=world';
parse_str(substr($q, strpos($q, '?')+1);
echo $hello; // outputs 'world'

考虑使用parse_str第二个参数来代替数组,以避免覆盖局部变量。

答案 2 :(得分:0)

你可能想要使用urldecode加上返回提取的变量,如下所示:

... some helper class...
/**
* Return parsed serialized JQuery object as PHP array of extracted variables
*/
protected static function parseFields($encoded){
    parse_str(urldecode($encoded));
    unset($encoded);
    return get_defined_vars();
}

此外,您可能希望利用JQuery函数“$ .param(data)”来创建URL编码的字符串:

var encoded=$.param(fields);

并通过AJAX / POST请求提交给服务器以运行parseFields()。