WordPress.org

Make WordPress Core

Ticket #4884: http_build_query.php

File http_build_query.php, 2.9 KB (added by Viper007Bond, 7 years ago)

PHP_Compat version

Line 
1<?php
2// $Id: http_build_query.php,v 1.22 2007/04/17 10:09:56 arpad Exp $
3
4
5/**
6 * Replace function http_build_query()
7 *
8 * @category    PHP
9 * @package     PHP_Compat
10 * @license     LGPL - http://www.gnu.org/licenses/lgpl.html
11 * @copyright   2004-2007 Aidan Lister <aidan@php.net>, Arpad Ray <arpad@php.net>
12 * @link        http://php.net/function.http-build-query
13 * @author      Stephan Schmidt <schst@php.net>
14 * @author      Aidan Lister <aidan@php.net>
15 * @version     $Revision: 1.22 $
16 * @since       PHP 5
17 * @require     PHP 4.0.0 (user_error)
18 */
19function php_compat_http_build_query($formdata, $numeric_prefix = null)
20{
21    // If $formdata is an object, convert it to an array
22    if (is_object($formdata)) {
23        $formdata = get_object_vars($formdata);
24    }
25
26    // Check we have an array to work with
27    if (!is_array($formdata)) {
28        user_error('http_build_query() Parameter 1 expected to be Array or Object. Incorrect value given.',
29            E_USER_WARNING);
30        return false;
31    }
32
33    // If the array is empty, return null
34    if (empty($formdata)) {
35        return;
36    }
37
38    // Argument seperator
39    $separator = ini_get('arg_separator.output');
40    if (strlen($separator) == 0) {
41        $separator = '&';
42    }
43
44    // Start building the query
45    $tmp = array ();
46    foreach ($formdata as $key => $val) {
47        if (is_null($val)) {
48            continue;
49        }
50
51        if (is_integer($key) && $numeric_prefix != null) {
52            $key = $numeric_prefix . $key;
53        }
54
55        if (is_scalar($val)) {
56            array_push($tmp, urlencode($key) . '=' . urlencode($val));
57            continue;
58        }
59
60        // If the value is an array, recursively parse it
61        if (is_array($val) || is_object($val)) {
62            array_push($tmp, php_compat_http_build_query_helper($val, urlencode($key)));
63            continue;
64        }
65
66        // The value is a resource
67        return null;
68    }
69
70    return implode($separator, $tmp);
71}
72
73
74// Helper function
75function php_compat_http_build_query_helper($array, $name)
76{
77    $tmp = array ();
78    foreach ($array as $key => $value) {
79        if (is_array($value)) {
80            array_push($tmp, php_compat_http_build_query_helper($value, sprintf('%s[%s]', $name, $key)));
81        } elseif (is_scalar($value)) {
82            array_push($tmp, sprintf('%s[%s]=%s', $name, urlencode($key), urlencode($value)));
83        } elseif (is_object($value)) {
84            array_push($tmp, php_compat_http_build_query_helper(get_object_vars($value), sprintf('%s[%s]', $name, $key)));
85        }
86    }
87
88    // Argument seperator
89    $separator = ini_get('arg_separator.output');
90    if (strlen($separator) == 0) {
91        $separator = '&';
92    }
93
94    return implode($separator, $tmp);
95}
96
97
98// Define
99if (!function_exists('http_build_query')) {
100    function http_build_query($formdata, $numeric_prefix = null)
101    {
102        return php_compat_http_build_query($formdata, $numeric_prefix);
103    }
104}