函数文档

_http_build_query()

💡 云策文档标注

概述

_http_build_query() 是 WordPress 核心中用于构建 URL 查询字符串的函数,基于 PHP 原生函数修改以兼容 PHP5 行为。它处理数组或对象数据,支持参数定制化,如前缀、分隔符和编码选项。

关键要点

  • 函数接受数组或对象作为输入数据,并转换为数组处理。
  • 参数包括 $prefix(前缀)、$sep(分隔符)、$key(键名前缀)和 $urlencode(是否编码),均提供默认值。
  • 递归处理嵌套数组或对象,支持 URL 编码和特殊值(如 false 转换为 '0')的处理。
  • 返回构建的查询字符串,分隔符默认为 'arg_separator.output' 配置。

代码示例

function _http_build_query( $data, $prefix = null, $sep = null, $key = '', $urlencode = true ) {
    $ret = array();

    foreach ( (array) $data as $k => $v ) {
        if ( $urlencode ) {
            $k = urlencode( $k );
        }

        if ( is_int( $k ) && null !== $prefix ) {
            $k = $prefix . $k;
        }

        if ( ! empty( $key ) ) {
            $k = $key . '%5B' . $k . '%5D';
        }

        if ( null === $v ) {
            continue;
        } elseif ( false === $v ) {
            $v = '0';
        }

        if ( is_array( $v ) || is_object( $v ) ) {
            array_push( $ret, _http_build_query( $v, '', $sep, $k, $urlencode ) );
        } elseif ( $urlencode ) {
            array_push( $ret, $k . '=' . urlencode( $v ) );
        } else {
            array_push( $ret, $k . '=' . $v );
        }
    }

    if ( null === $sep ) {
        $sep = ini_get( 'arg_separator.output' );
    }

    return implode( $sep, $ret );
}

📄 原文内容

From php.net (modified by Mark Jaquith to behave like the native PHP5 function).

Description

See also

Parameters

$dataarray|objectrequired
An array or object of data. Converted to array.
$prefixstringoptional
Numeric index. If set, start parameter numbering with it.

Default:null

$sepstringoptional
Argument separator; defaults to 'arg_separator.output'.

Default:null

$keystringoptional
Used to prefix key name. Default empty string.
$urlencodebooloptional
Whether to use urlencode() in the result.

Default:true

Return

string The query string.

Source

function _http_build_query( $data, $prefix = null, $sep = null, $key = '', $urlencode = true ) {
	$ret = array();

	foreach ( (array) $data as $k => $v ) {
		if ( $urlencode ) {
			$k = urlencode( $k );
		}

		if ( is_int( $k ) && null !== $prefix ) {
			$k = $prefix . $k;
		}

		if ( ! empty( $key ) ) {
			$k = $key . '%5B' . $k . '%5D';
		}

		if ( null === $v ) {
			continue;
		} elseif ( false === $v ) {
			$v = '0';
		}

		if ( is_array( $v ) || is_object( $v ) ) {
			array_push( $ret, _http_build_query( $v, '', $sep, $k, $urlencode ) );
		} elseif ( $urlencode ) {
			array_push( $ret, $k . '=' . urlencode( $v ) );
		} else {
			array_push( $ret, $k . '=' . $v );
		}
	}

	if ( null === $sep ) {
		$sep = ini_get( 'arg_separator.output' );
	}

	return implode( $sep, $ret );
}

Changelog

Version Description
3.2.0 Introduced.