parse_str не работает при наличии знака вопроса? - PullRequest
1 голос
/ 16 января 2011

почему я получаю ошибку, когда передаю строку с чем-то вроде '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 ]

8 голосов
/ 16 января 2011

Функция 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

Посмотрите на это в идеоне.

1 голос
/ 16 января 2011

parse_str будет принимать только строки запроса:

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

Сначала удалите начало URL:

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

Попробуйте использовать parse_str второй аргумент, чтобы данныевместо этого массив, чтобы избежать перезаписи локальных переменных.

0 голосов
/ 06 марта 2013

Вы можете использовать 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 ().

...