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

时间:2012-02-08 18:45:55

标签: php url

是否有可靠的parse_str()函数替代解析查询字符串?

查询字符串来自外部服务(并且您无法完全控制它)时,我发现它非常容易混淆且容易出错:

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

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

5 个答案:

答案 0 :(得分:5)

将可选的第二个参数传递给parse_str(),它会将值放在关联数组中,而不是创建/覆盖变量。来自php manual

  

如果存在第二个参数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
)

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

您可以将数组传递给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 "")

答案 4 :(得分:0)

使用\GuzzleHttp\psr7\parse_query作曲家软件包提供的guzzlehttp/psr7功能。

这对我有用-parse_str完全无法解析一些查询并返回了一个空数组。

它具有更现代的功能:

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

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