WordPress.org

Make WordPress Core

Ticket #16943: 16943.patch

File 16943.patch, 5.8 KB (added by hakre, 3 years ago)

add_query_arg() + friends

  • wp-includes/formatting.php

    ### Eclipse Workspace Patch 1.0
    #P wordpress-trunk
     
    12451245        if ( is_array($value) ) { 
    12461246                $value = array_map('stripslashes_deep', $value); 
    12471247        } elseif ( is_object($value) ) { 
    1248                 $vars = get_object_vars( $value ); 
    1249                 foreach ($vars as $key=>$data) { 
    1250                         $value->{$key} = stripslashes_deep( $data ); 
     1248                foreach ( $value as &$data ) { 
     1249                        $data = stripslashes_deep( $data ); 
    12511250                } 
    12521251        } else { 
    12531252                $value = stripslashes($value); 
     
    12681267 * @return array|string $value The encoded array (or string from the callback). 
    12691268 */ 
    12701269function urlencode_deep($value) { 
    1271         $value = is_array($value) ? array_map('urlencode_deep', $value) : urlencode($value); 
     1270        is_array( $value ) ? array_walk_recursive( $value, 'urlencode_ref' ) : $value = urlencode($value); 
    12721271        return $value; 
    12731272} 
    12741273 
    12751274/** 
     1275 * map urlencode() onto a reference 
     1276 *  
     1277 * @since 3.2 
     1278 * @param string $value to be urlencoded 
     1279 */ 
     1280function urlencode_ref( &$value ) { 
     1281        $value = urlencode( $value ); 
     1282} 
     1283 
     1284/** 
    12761285 * Converts email addresses characters to HTML entities to block spam bots. 
    12771286 * 
    12781287 * @since 0.71 
  • wp-includes/functions.php

     
    13771377 * using this function. You can also retrieve the full URL with query data. 
    13781378 * 
    13791379 * Adding a single key & value or an associative array. Setting a key value to 
    1380  * emptystring removes the key. Omitting oldquery_or_uri uses the $_SERVER 
    1381  * value. 
     1380 * an empty string removes the key. Omitting oldquery_or_uri uses the  
     1381 * $_SERVER['REQUEST_URI'] value. 
    13821382 * 
    13831383 * @since 1.5.0 
    13841384 * 
    1385  * @param mixed $param1 Either newkey or an associative_array 
    1386  * @param mixed $param2 Either newvalue or oldquery or uri 
    1387  * @param mixed $param3 Optional. Old query or uri 
     1385 * @param array|string $param1 Either newkey or an associative_array 
     1386 * @param string $param2 Either newvalue or Optional. Old query or uri 
     1387 * @param string $param3 Optional. Old query or uri 
    13881388 * @return string New URL query string. 
    13891389 */ 
    13901390function add_query_arg() { 
    1391         $ret = ''; 
    1392         if ( is_array( func_get_arg(0) ) ) { 
    1393                 if ( @func_num_args() < 2 || false === @func_get_arg( 1 ) ) 
    1394                         $uri = $_SERVER['REQUEST_URI']; 
    1395                 else 
    1396                         $uri = @func_get_arg( 1 ); 
    1397         } else { 
    1398                 if ( @func_num_args() < 3 || false === @func_get_arg( 2 ) ) 
    1399                         $uri = $_SERVER['REQUEST_URI']; 
    1400                 else 
    1401                         $uri = @func_get_arg( 2 ); 
     1391        $args = func_get_args(); 
     1392        $args = array_merge( $args , array_fill( 0, 3, false )); # all unset parameter are false 
     1393 
     1394        // if first param is not an array, it forms together with the second parameter 
     1395        // the key=value pair. Every other argument shifts one to front then. 
     1396        if ( ! is_array( $args[0] ) ) { 
     1397                $key = array_shift( $args ); 
     1398                $args[0] = array( $key => $args[0] ); 
    14021399        } 
    14031400 
    1404         if ( $frag = strstr( $uri, '#' ) ) 
    1405                 $uri = substr( $uri, 0, -strlen( $frag ) ); 
    1406         else 
    1407                 $frag = ''; 
     1401        // the last argument is either query or uri, default is $_SERVER['REQUEST_URI'] 
     1402        $uri = false === $args[1] ? $_SERVER['REQUEST_URI'] : $args[1]; 
    14081403 
    1409         if ( preg_match( '|^https?://|i', $uri, $matches ) ) { 
    1410                 $protocol = $matches[0]; 
    1411                 $uri = substr( $uri, strlen( $protocol ) ); 
    1412         } else { 
    1413                 $protocol = ''; 
    1414         } 
     1404        // pop fragment off, defaults to empty fragment  
     1405        if ( $fragment = (string) strstr( $uri, '#' ) ) 
     1406                $uri = substr( $uri, 0, -strlen( $fragment ) ); 
    14151407 
     1408        // shift scheme off, defaults to empty scheme 
     1409        if ( $scheme = (string) preg_replace( '|^(https?://)?(.*)$|i', '$1', $uri ) ) 
     1410                $uri = substr( $uri, strlen( $scheme ) ); 
     1411 
     1412        // extract base and query from query or uri 
    14161413        if ( strpos( $uri, '?' ) !== false ) { 
    1417                 $parts = explode( '?', $uri, 2 ); 
    1418                 if ( 1 == count( $parts ) ) { 
    1419                         $base = '?'; 
    1420                         $query = $parts[0]; 
    1421                 } else { 
    1422                         $base = $parts[0] . '?'; 
    1423                         $query = $parts[1]; 
    1424                 } 
    1425         } elseif ( !empty( $protocol ) || strpos( $uri, '=' ) === false ) { 
     1414                list( $base, $query ) = explode( '?', $uri, 2 ); 
     1415                $base .= '?'; 
     1416        } elseif ( $scheme || strpos( $uri, '=' ) === false ) { 
    14261417                $base = $uri . '?'; 
    14271418                $query = ''; 
    14281419        } else { 
     
    14321423 
    14331424        wp_parse_str( $query, $qs ); 
    14341425        $qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string 
    1435         if ( is_array( func_get_arg( 0 ) ) ) { 
    1436                 $kayvees = func_get_arg( 0 ); 
    1437                 $qs = array_merge( $qs, $kayvees ); 
    1438         } else { 
    1439                 $qs[func_get_arg( 0 )] = func_get_arg( 1 ); 
    1440         } 
     1426        $qs = array_merge( $qs, $args[0] ); 
    14411427 
    1442         foreach ( (array) $qs as $k => $v ) { 
    1443                 if ( $v === false ) 
    1444                         unset( $qs[$k] ); 
    1445         } 
     1428        // remove all entries === false 
     1429        if ( $del = array_keys( $qs, false, true ) ) 
     1430                $qs = array_diff_key( $qs, array_flip( $del ) ); 
    14461431 
    14471432        $ret = build_query( $qs ); 
    14481433        $ret = trim( $ret, '?' ); 
    14491434        $ret = preg_replace( '#=(&|$)#', '$1', $ret ); 
    1450         $ret = $protocol . $base . $ret . $frag; 
     1435        $ret = $scheme . $base . $ret . $fragment; 
    14511436        $ret = rtrim( $ret, '?' ); 
    14521437        return $ret; 
    14531438} 
     
    14581443 * @since 1.5.0 
    14591444 * 
    14601445 * @param string|array $key Query key or keys to remove. 
    1461  * @param bool $query When false uses the $_SERVER value. 
     1446 * @param bool $query Optional. When false uses the $_SERVER value. 
    14621447 * @return string New URL query string. 
    14631448 */ 
    1464 function remove_query_arg( $key, $query=false ) { 
    1465         if ( is_array( $key ) ) { // removing multiple keys 
    1466                 foreach ( $key as $k ) 
    1467                         $query = add_query_arg( $k, false, $query ); 
    1468                 return $query; 
    1469         } 
    1470         return add_query_arg( $key, false, $query ); 
     1449function remove_query_arg( $key, $query = false ) { 
     1450        $key = (array) $key; 
     1451        if ( $count = count( $key ) ) 
     1452                $key = array_combine( $key, array_fill( 0, $count, false ) ); 
     1453        return add_query_arg( $key, $query ); 
    14711454} 
    14721455 
    14731456/**