From d59d54b09db7064ed70d38e132aaaabdf9e84c6e Mon Sep 17 00:00:00 2001 From: ryan Date: Sun, 18 Jul 2010 13:46:35 +0000 Subject: [PATCH] Hex octets are case-insenstive. Don't 301 when the only octet case differs. Props hakre. fixes #14292 for 3.1 git-svn-id: http://svn.automattic.com/wordpress/trunk@15437 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/canonical.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/wp-includes/canonical.php b/wp-includes/canonical.php index 1cbf7d27b2..4e8bee8a99 100644 --- a/wp-includes/canonical.php +++ b/wp-includes/canonical.php @@ -343,6 +343,24 @@ function redirect_canonical($requested_url=null, $do_redirect=true) { if ( !$redirect_url || $redirect_url == $requested_url ) return false; + + // Hex encoded octets are case-insensitive. + if ( false !== strpos($requested_url, '%') ) { + if ( !function_exists('lowercase_octets') ) { + function lowercase_octets($matches) { + return strtolower( $matches[0] ); + } + } + $requested_url = preg_replace_callback('|%[a-fA-F0-9][a-fA-F0-9]|', 'lowercase_octets', $requested_url); + } + + // Hex encoded octets are case-insensitive. + if ( false !== strpos($requested_url, '%') ) { + function lowercase_octets($matches) { + return strtolower($matches[0]); + } + $requested_url = preg_replace_callback('|%[a-fA-F0-9][a-fA-F0-9]|', 'lowercase_octets', $requested_url); + } // Note that you can use the "redirect_canonical" filter to cancel a canonical redirect for whatever reason by returning FALSE $redirect_url = apply_filters('redirect_canonical', $redirect_url, $requested_url);