首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于从数组构建查询字符串的PHP函数

用于从数组构建查询字符串的PHP函数
EN

Stack Overflow用户
提问于 2008-12-30 16:49:06
回答 4查看 165K关注 0票数 179

我正在查找PHP函数的名称,以便从键值对数组构建查询字符串。请注意,我正在寻找内置的PHP函数来做这件事,而不是一个自制的(这是所有的谷歌搜索似乎返回)。有一个,我只是记不住它的名字或者在php.net上找不到它。IIRC的名字并不那么直观。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-30 16:52:14

你在找http_build_query()

票数 332
EN

Stack Overflow用户

发布于 2011-05-14 03:54:14

下面是一个简单的php4友好实现:

代码语言:javascript
复制
/**
* Builds an http query string.
* @param array $query  // of key value pairs to be used in the query
* @return string       // http query string.
**/
function build_http_query( $query ){

    $query_array = array();

    foreach( $query as $key => $key_value ){

        $query_array[] = urlencode( $key ) . '=' . urlencode( $key_value );

    }

    return implode( '&', $query_array );

}
票数 22
EN

Stack Overflow用户

发布于 2014-10-31 16:38:16

正如对@thatjuan的回答的补充。

更兼容的PHP4版本:

代码语言:javascript
复制
if (!function_exists('http_build_query')) {
    if (!defined('PHP_QUERY_RFC1738')) {
        define('PHP_QUERY_RFC1738', 1);
    }
    if (!defined('PHP_QUERY_RFC3986')) {
        define('PHP_QUERY_RFC3986', 2);
    }
    function http_build_query($query_data, $numeric_prefix = '', $arg_separator = '&', $enc_type = PHP_QUERY_RFC1738)
    {
        $data = array();
        foreach ($query_data as $key => $value) {
            if (is_numeric($key)) {
                $key = $numeric_prefix . $key;
            }
            if (is_scalar($value)) {
                $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($key) : rawurlencode($key);
                $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($value) : rawurlencode($value);
                $data[] = "$k=$v";
            } else {
                foreach ($value as $sub_k => $val) {
                    $k = "$key[$sub_k]";
                    $k = $enc_type == PHP_QUERY_RFC3986 ? urlencode($k) : rawurlencode($k);
                    $v = $enc_type == PHP_QUERY_RFC3986 ? urlencode($val) : rawurlencode($val);
                    $data[] = "$k=$v";
                }
            }
        }
        return implode($arg_separator, $data);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/400805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档