Canonical: Strip trailing punctuation from permalinks.
Previously attempted in [40256], which caused the test for decoded curly quotes to fail in some environments. `$_SERVER['REQUEST_URI']` contains the encoded URI, so this version removes the failing tests and only checks for encoded curly quotes. Props joostdevalk, lancewillett, SergeyBiryukov. Fixes #20383. Built from https://develop.svn.wordpress.org/trunk@41991 git-svn-id: http://core.svn.wordpress.org/trunk@41825 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
bcdedf7f4a
commit
9eb75432b6
|
@ -392,12 +392,28 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) {
|
|||
// trailing /index.php
|
||||
$redirect['path'] = preg_replace('|/' . preg_quote( $wp_rewrite->index, '|' ) . '/*?$|', '/', $redirect['path']);
|
||||
|
||||
// Remove trailing spaces from the path
|
||||
$redirect['path'] = preg_replace( '#(%20| )+$#', '', $redirect['path'] );
|
||||
$punctuation_pattern = implode( '|', array_map( 'preg_quote', array(
|
||||
' ', '%20', // space
|
||||
'!', '%21', // exclamation mark
|
||||
'"', '%22', // double quote
|
||||
"'", '%27', // single quote
|
||||
'(', '%28', // opening bracket
|
||||
')', '%29', // closing bracket
|
||||
',', '%2C', // comma
|
||||
'.', '%2E', // period
|
||||
';', '%3B', // semicolon
|
||||
'{', '%7B', // opening curly bracket
|
||||
'}', '%7D', // closing curly bracket
|
||||
'%E2%80%9C', // opening curly quote
|
||||
'%E2%80%9D', // closing curly quote
|
||||
) ) );
|
||||
|
||||
// Remove trailing spaces and end punctuation from the path.
|
||||
$redirect['path'] = preg_replace( "#($punctuation_pattern)+$#", '', $redirect['path'] );
|
||||
|
||||
if ( !empty( $redirect['query'] ) ) {
|
||||
// Remove trailing spaces from certain terminating query string args
|
||||
$redirect['query'] = preg_replace( '#((p|page_id|cat|tag)=[^&]*?)(%20| )+$#', '$1', $redirect['query'] );
|
||||
// Remove trailing spaces and end punctuation from certain terminating query string args.
|
||||
$redirect['query'] = preg_replace( "#((p|page_id|cat|tag)=[^&]*?)($punctuation_pattern)+$#", '$1', $redirect['query'] );
|
||||
|
||||
// Clean up empty query strings
|
||||
$redirect['query'] = trim(preg_replace( '#(^|&)(p|page_id|cat|tag)=?(&|$)#', '&', $redirect['query']), '&');
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '4.9-beta3-41990';
|
||||
$wp_version = '4.9-beta3-41991';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
|
Loading…
Reference in New Issue