Formatting: Improve parenthesis handling in make_clickable().

Improve the regular expression for making links clickable to account for parenthesis in links containing an extension, for example: `http://wordpress.org/my-image(2).jpg`.

Props coquardcyr, hellofromtonya, parthvataliya, rhellewellgmailcom.
Fixes #62037.


git-svn-id: https://develop.svn.wordpress.org/trunk@59143 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Peter Wilson 2024-09-30 23:27:34 +00:00
parent cf536009d5
commit 9b6c034e2f
2 changed files with 15 additions and 0 deletions

View File

@ -2943,6 +2943,10 @@ function _make_url_clickable_cb( $matches ) {
$suffix = $matches[3];
}
if ( isset( $matches[4] ) && ! empty( $matches[4] ) ) {
$url .= $matches[4];
}
// Include parentheses in the URL only if paired.
while ( substr_count( $url, '(' ) < substr_count( $url, ')' ) ) {
$suffix = strrchr( $url, ')' ) . $suffix;
@ -3115,6 +3119,7 @@ function make_clickable( $text ) {
)*
)
(\)?) # 3: Trailing closing parenthesis (for parenthesis balancing post processing).
(\\.\\w{2,6})? # 4: Allowing file extensions (e.g., .jpg, .png).
~xS';
/*
* The regex is a non-anchored pattern and does not have a single fixed starting character.

View File

@ -245,6 +245,16 @@ class Tests_Formatting_MakeClickable extends WP_UnitTestCase {
Richard Hamming wrote about people getting more done with their doors closed, but',
),
// @ticket #62037
'URL with brackets in path before the extension' => array(
'text' => 'http://example-image(2).jpg',
'expected' => '<a href="http://example-image(2).jpg" rel="nofollow">http://example-image(2).jpg</a>',
),
'URL with brackets within path and with a extension' => array(
'text' => 'http://example-(2)-image.jpg',
'expected' => '<a href="http://example-(2)-image.jpg" rel="nofollow">http://example-(2)-image.jpg</a>',
),
// @ticket 11211
// Test with real comments which were incorrectly linked.
'real world: example.com text (.org URL)' => array(