Есть ли надежные альтернативы parse str (), которые не подвержены ошибкам?


Есть ли какая-либо надежная альтернатива parse_str() функция для разбора строки запроса?

Я нашел его очень запутанным и подверженным ошибкам, особенно когда строка запроса исходит от внешнего сервиса (и вы не можете полностью контролировать его):

$error = "Error message";
parse_str("param1=hello&error=false"); // Overrides $error

parse_str($externalQuery);
// Which variables are setted and which not?
4 3

4 ответа:

$error = "Error message";
$output_array = array();
parse_str("param1=hello&error=false", $output_array); 
var_dump($output_array);

Действительно ли вам нужно перезаписать существующие переменные или создать новые "неизвестные" переменные?

Передайте необязательный второй аргумент parse_str() и он будет помещать значения в ассоциативный массив вместо создания / перезаписи переменных. Из руководства php:

Если присутствует второй параметр arr, то переменные хранятся в этой переменной как элементы массива.

Сначала необходимо инициализировать массив. Сделайте это:

$error = "Error message";
$vars = array();
parse_str("param1=hello&error=false", $vars);
echo $error . "\n";
print_r($vars);

Который выводит:

Error message
Array
(
    [param1] => hello
    [error] => false
)

Еще раз взгляните на документы. parse_str поддерживает передачу 2-го параметра, который будет хранить переменные.

$error = "Error message";
parse_str("param1=hello&error=false", $data);

echo $error; // "Error message"
var_dump($data['error']); //false

Вы можете передать массив в parse_str, и он поместит строку запроса KV пар в:

$error = "Error message";
$queryString = array();
parse_str("param1=hello&error=false", $queryString);

echo $error; //"Error message"
echo $queryString["error"]; //"false" (actually will echo "")