[wp-trac] [WordPress Trac] #32071: Function to generate safe & trusted URLs

WordPress Trac noreply at wordpress.org
Wed Apr 22 23:06:33 UTC 2015

#32071: Function to generate safe & trusted URLs
 Reporter:  johnjamesjacoby  |       Owner:
     Type:  enhancement      |      Status:  new
 Priority:  normal           |   Milestone:  Awaiting Review
Component:  General          |     Version:
 Severity:  normal           |  Resolution:
 Keywords:  has-patch        |     Focuses:

Comment (by johnjamesjacoby):

 Replying to [comment:1 johnbillion]:
 > I'm not a fan of escaping inside functions. Developers should become
 familiar with late escaping. I think a function like this introduces yet
 more inconsistency and gives the wrong impression that you can trust the
 output of some functions.

 I don't disagree about late escaping, but I disagree strongly with it
 being less consistent.

 I can think of several functions without looking that escape and echo
 their unescaped equivalent: `the_permalink()`, `comments_link()`, and a
 bunch of feed functions. Regardless of these examples, it's semantics
 whether it's `esc_url()` or `wp_generate_url()` or some other function
 that's doing it.

 The mechanism through which late-escaping occurs matters much less to me
 than being confident that specific functions perform specific tasks given
 specific parameters with sane defaults and a reasonable ability to

 I want a way to reduce the number of permutations of how URL's are
 constructed down to a single function, to avoid differences like the
 following examples:

 bp_core_redirect( add_query_arg( array( 'action' => 'bpnoaccess' ),
 wp_login_url( $redirect ) ) );

 echo esc_url( add_query_arg( array( 'page' => 'bp-components', 'action' =>
 'all'      ), bp_get_admin_url( $page ) ) );

 esc_url( bp_get_admin_url( add_query_arg( array( 'page' => 'bp-components'
 ), 'admin.php' ) ) )

 echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'do_delete',
 'gid' => implode( ',', $gids ) ), $base_url ), 'bp-groups-delete' ) )

 And probably one of my favorites:

 esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode(
 wp_unslash( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'users.php',
 'deleteuser' ) . '&action=deleteuser&id=' . $user->ID ) ) )

 If nothing else, I'll update the patch without the escaping bit at the
 end. My point still stands that developers are forced to nest too much
 complex logic into a series of somewhat unpredictable functions just to
 generate the only thing that connects one page on the web to another.

Ticket URL: <https://core.trac.wordpress.org/ticket/32071#comment:2>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list