是否有可靠的parse_str()
函数替代解析查询字符串?
当查询字符串来自外部服务(并且您无法完全控制它)时,我发现它非常容易混淆且容易出错:
$error = "Error message";
parse_str("param1=hello&error=false"); // Overrides $error
parse_str($externalQuery);
// Which variables are setted and which not?
答案 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。