在PHP中解析包含点的字符串

giu*_*ppe 6 php parsing

我会解析以下字符串:

$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函数吗?

Ama*_*ali 9

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)

  • 很好的捕获Amal.希望有任何括号,`&var [] = 1&var [] = 2` (2认同)