是否有可靠的不易出错的parse_str()替代方案


Is there a reliable parse_str() alternatives that is not error-prone?

parse_str()函数解析查询字符串有可靠的替代方法吗?

我发现它非常令人困惑和容易出错,特别是当查询字符串来自外部服务时(您无法完全控制它):

$error = "Error message";
parse_str("param1=hello&error=false"); // Overrides $error
parse_str($externalQuery);
// Which variables are setted and which not?

将可选的第二个参数传递给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
)

使用''GuzzleHttp''psr7''parse_query函数,该函数可与GuzzleHttp/psr7 composer包一起使用。

这对我来说很有效——parse_str只是无法解析一些查询,返回了一个空数组。

它有一个更现代的系统:

$aParsedQuery = parse_query($sQueryString, $bUrlDecode);

其中第二个参数默认为true。

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

您真的需要覆盖现有变量还是创建新的"未知"变量?

再看一眼文档。parse_str支持传递第二个参数,该参数将存储变量。

$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 "")