我会解析以下字符串:
$str = 'ProceduresCustomer.tipi_id=10&ProceduresCustomer.id=1';
parse_str($str,$f);
Run Code Online (Sandbox Code Playgroud)
我希望将$ f解析为:
array(
'ProceduresCustomer.tipi_id' => '10',
'ProceduresCustomer.id' => '1'
)
Run Code Online (Sandbox Code Playgroud)
实际上,parse_str
回报
array(
'ProceduresCustomer_tipi_id' => '10',
'ProceduresCustomer_id' => '1'
)
Run Code Online (Sandbox Code Playgroud)
除了编写我自己的函数之外,还有人知道是否有php函数吗?
从PHP手册:
变量名中的点和空格将转换为下划线.例如
<input name="a.b" />
变成$_REQUEST["a_b"]
.
所以,这是不可能的. parse_str()
将所有期间转换为下划线.如果您确实无法避免在查询变量名中使用句点,则必须编写自定义函数来实现此目的.
以下函数(取自此答案)将查询字符串中每个键值对的名称转换为其对应的十六进制形式,然后parse_str()
对其执行操作.然后,他们又恢复原状.这样,期间不会被触及:
function parse_qs($data)
{
$data = preg_replace_callback('/(?:^|(?<=&))[^=[]+/', function($match) {
return bin2hex(urldecode($match[0]));
}, $data);
parse_str($data, $values);
return array_combine(array_map('hex2bin', array_keys($values)), $values);
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
$data = parse_qs($_SERVER['QUERY_STRING']);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1745 次 |
最近记录: |