开发者

parse_str doesn't work when the question mark is present?

why I get error when I pass the string with something like 'form.php?', for instance,

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

I get this,

Notice: Undefined variable: category in C:\wamp\www\1hundred_201开发者_StackOverflow社区1_MVC\applications\CMS\category_manage.php on line xx

but,

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

I get what I want,

contacts

how can I fix it? I have to pass something like 'xxx.php?category=contacts' to get 'contacts' or something in the variable.

thanks.


The function parse_str only parses the query string, not the entire URL. Try using parse_url with the component set to PHP_URL_QUERY to extract the query string first, then use parse_str on that.

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

Result:

contacts

See it at ideone.


parse_str will only accept query strings:

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

Strip the beginning of the URL first:

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

Consider using parse_str second argument to have the data in an array instead, to avoid overwriting local variables.


You may want to use urldecode plus return extracted variables like so:

... 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();
}

Also, you may want to utilize the JQuery function "$.param(data)" for creating URL encoded string:

var encoded=$.param(fields);

and submit via AJAX/POST request to server to function parseFields().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜