Use less greedy regex in `wptexturize()`. Adds unit tests.

Props miqrogroove.
See #28564.


git-svn-id: https://develop.svn.wordpress.org/trunk@28852 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Scott Taylor 2014-06-26 17:14:47 +00:00
parent 3513f37623
commit 8103dc5ade
2 changed files with 20 additions and 4 deletions

View File

@ -198,7 +198,7 @@ function wptexturize($text, $reset = false) {
. '(?(?=!--)' // Is this a comment?
. '.+?--\s*>' // Find end of comment
. '|'
. '.+?>' // Find end of element
. '[^>]+>' // Find end of element
. ')'
. '|'
. '\[' // Find start of shortcode.
@ -206,7 +206,7 @@ function wptexturize($text, $reset = false) {
. '(?:'
. '[^\[\]<>]' // Shortcodes do not contain other shortcodes.
. '|'
. '<.+?>' // HTML elements permitted. Prevents matching ] before >.
. '<[^>]+>' // HTML elements permitted. Prevents matching ] before >.
. ')+'
. '\]' // Find end of shortcode.
. '\]?' // Shortcodes may end with ]]
@ -224,12 +224,12 @@ function wptexturize($text, $reset = false) {
_wptexturize_pushpop_element( $curl, $no_texturize_tags_stack, $no_texturize_tags );
}
} elseif ( '[' === $first && 1 === preg_match( '/^\[(?:[^\[\]<>]|<.+?>)+\]$/', $curl ) ) {
} elseif ( '[' === $first && 1 === preg_match( '/^\[(?:[^\[\]<>]|<[^>]+>)+\]$/', $curl ) ) {
// This is a shortcode delimeter.
_wptexturize_pushpop_element( $curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes );
} elseif ( '[' === $first && 1 === preg_match( '/^\[\[?(?:[^\[\]<>]|<.+?>)+\]\]?$/', $curl ) ) {
} elseif ( '[' === $first && 1 === preg_match( '/^\[\[?(?:[^\[\]<>]|<[^>]+>)+\]\]?$/', $curl ) ) {
// This is an escaped shortcode delimeter.
// Do not texturize.

View File

@ -1305,6 +1305,22 @@ class Tests_Formatting_WPTexturize extends WP_UnitTestCase {
'word <img src="http://example.com/wp-content/uploads/2014/06/image-300x216.gif" /> word', // Ensure we are not corrupting image URLs.
'word <img src="http://example.com/wp-content/uploads/2014/06/image-300x216.gif" /> word',
),
array(
'[ do texturize "[quote]" here ]',
'[ do texturize &#8220;[quote]&#8221; here ]',
),
array(
'[ regex catches this <a href="[quote]">here</a> ]',
'[ regex catches this <a href="[quote]">here</a> ]',
),
array(
'[ but also catches the <b>styled "[quote]" here</b> ]',
'[ but also catches the <b>styled &#8220;[quote]&#8221; here</b> ]',
),
array(
'[Let\'s get crazy<input>[plugin code="<a href=\'?a[]=100\'>hello</a>"]</input>world]',
'[Let&#8217;s get crazy<input>[plugin code="<a href=\'?a[]=100\'>hello</a>"]</input>world]',
),
);
}