是否有处理重复键的parse_str + http_build_query替代方案?

时间:2016-05-30 15:28:43

标签: php parsing

我有以下代码

$post = 'foo=bar&foo=baz';
parse_str($post, $parameters);

收率:

array(1) {
   'foo' =>
   string(3) "baz"
}

我无法修改$post

我正在寻找的是parse_str的版本(处理边缘情况并解码为parse_str),但允许重复的密钥。

它应与http_build_query兼容,以重新组合$post数据(修改后)。

有没有人实现这样的方法还是有lib?

我的搜索还没有产生。

1 个答案:

答案 0 :(得分:1)

基于http://php.net/manual/ru/function.parse-str.php#76792我决定对我的处理内联 - 没有将整个思想转换为某种结构并将其重新构建。这就是我最终的结果:

function process_query_str($str) {
    # result array
    $parts = array();

    # split on outer delimiter
    $pairs = explode('&', $str);

    # loop through each pair
    foreach ($pairs as $i) {
        # split into name and value
        list($name,$value) = explode('=', $i, 2);
        $value = urldecode($value);

        // **** DO PROCESSING ****
        $value = strtoupper($value);

        // reassemble
        $parts[] = http_build_query(array($name=>$value));
    }

    # return result array
    return implode('&', $parts);
}

$query = process_query_str('foo=bar&foo=baz');
echo $query;