Make WordPress Core

Ticket #4878: 4878.003.diff

File 4878.003.diff, 2.5 KB (added by markjaquith, 18 years ago)

better logic

  • wp-includes/compat.php

     
    9898                }
    9999}
    100100
    101 // From php.net
    102 if(!function_exists('http_build_query')) {
    103          function http_build_query( $formdata, $numeric_prefix = null, $key = null ) {
    104                          $res = array();
    105                          foreach ((array)$formdata as $k=>$v) {
    106                                          $tmp_key = urlencode(is_int($k) ? $numeric_prefix.$k : $k);
    107                                          if ($key) $tmp_key = $key.'['.$tmp_key.']';
    108                                          $res[] = ( ( is_array($v) || is_object($v) ) ? http_build_query($v, null, $tmp_key) : $tmp_key."=".urlencode($v) );
    109                          }
    110                          $separator = ini_get('arg_separator.output');
    111                          return implode($separator, $res);
    112          }
     101if (!function_exists('http_build_query')) {
     102        function http_build_query($data, $prefix=null, $sep=null) {
     103                return _http_build_query($data, $prefix, $sep);
     104        }
    113105}
    114106
     107// from php.net (modified by Mark Jaquith to behave like the native PHP5 function)
     108function _http_build_query($data, $prefix=null, $sep=null, $key='') {
     109        $ret = array();
     110        foreach ( (array) $data as $k => $v ) {
     111                $k = urlencode($k);
     112                if ( is_int($k) && $prefix != null )
     113                        $k = $prefix.$k;
     114                if ( !empty($key) )
     115                        $k = $key . '%5B' . $k . '%5D';
     116
     117                if ( $v === NULL )
     118                        continue;
     119                elseif ( $v === FALSE )
     120                        $v = '0';
     121
     122                if ( is_array($v) || is_object($v) )
     123                        array_push($ret,_http_build_query($v, '', $sep, $k));
     124                else
     125                        array_push($ret, $k.'='.urlencode($v));
     126                }
     127
     128        if ( NULL === $sep )
     129                $sep = ini_get('arg_separator.output');
     130
     131        return implode($sep, $ret);
     132}
     133
    115134if ( !function_exists('_') ) {
    116135        function _($string) {
    117136                return $string;
  • wp-includes/functions.php

     
    644644                $qs[func_get_arg(0)] = func_get_arg(1);
    645645        }
    646646
    647         foreach($qs as $k => $v) {
    648                 if ( $v !== FALSE ) {
    649                         if ( $ret != '' )
    650                                 $ret .= '&';
    651                         if ( empty($v) && !preg_match('|[?&]' . preg_quote($k, '|') . '=|', $query) )
    652                                 $ret .= $k;
    653                         else
    654                                 $ret .= "$k=$v";
    655                 }
     647        foreach ( $qs as $k => $v ) {
     648                if ( $v === false )
     649                        unset($qs[$k]);
    656650        }
     651
     652        if ( ini_get('arg_separator.output') === '&')
     653                $ret = http_build_query($qs, '', '&');
     654        else
     655                $ret = _http_build_query($qs, NULL, '&');
    657656        $ret = trim($ret, '?');
     657        $ret = preg_replace('#=(&|$)#', '$1', $ret);
    658658        $ret = $protocol . $base . $ret . $frag;
    659659        $ret = rtrim($ret, '?');
    660660        return $ret;