diff options
author | Brett Profitt <brett.profitt@gmail.com> | 2013-07-09 12:13:17 -0400 |
---|---|---|
committer | Brett Profitt <brett.profitt@gmail.com> | 2013-07-09 12:13:17 -0400 |
commit | 9892692deefdb06d9e7176c72fc5780ab79e3a7d (patch) | |
tree | 4931f7e48754cbb5d67ae4ab4b62e67dfbd3d6c4 /engine | |
parent | 0dfe018f16e93aff5f046c08994a102e3f5d35e6 (diff) | |
download | elgg-9892692deefdb06d9e7176c72fc5780ab79e3a7d.tar.gz elgg-9892692deefdb06d9e7176c72fc5780ab79e3a7d.tar.bz2 |
Fixes #5706. Allowing parens in URIs if not last character.
Diffstat (limited to 'engine')
-rw-r--r-- | engine/lib/output.php | 8 | ||||
-rw-r--r-- | engine/tests/regression/trac_bugs.php | 3 |
2 files changed, 7 insertions, 4 deletions
diff --git a/engine/lib/output.php b/engine/lib/output.php index 5adc01053..6172a5c8d 100644 --- a/engine/lib/output.php +++ b/engine/lib/output.php @@ -27,16 +27,16 @@ function parse_urls($text) { // By default htmlawed rewrites tags to this format. // if PHP supported conditional negative lookbehinds we could use this: // $r = preg_replace_callback('/(?<!=)(?<![ ])?(?<!["\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\!\(\),]+)/i', - $r = preg_replace_callback('/(?<![=\/"\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\(\)]+)/i', + $r = preg_replace_callback('/(?<![=\/"\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\']+)/i', create_function( '$matches', ' $url = $matches[1]; - $punc = \'\'; + $punc = ""; $last = substr($url, -1, 1); - if (in_array($last, array(".", "!", ","))) { + if (in_array($last, array(".", "!", ",", "(", ")"))) { $punc = $last; - $url = rtrim($url, ".!,"); + $url = rtrim($url, ".!,()"); } $urltext = str_replace("/", "/<wbr />", $url); return "<a href=\"$url\" rel=\"nofollow\">$urltext</a>$punc"; diff --git a/engine/tests/regression/trac_bugs.php b/engine/tests/regression/trac_bugs.php index 5730830bb..f173b5b9f 100644 --- a/engine/tests/regression/trac_bugs.php +++ b/engine/tests/regression/trac_bugs.php @@ -291,6 +291,9 @@ class ElggCoreRegressionBugsTest extends ElggCoreUnitTest { 'unquoted already anchor <a href=http://www.yahoo.com>yahoo</a>' => 'unquoted already anchor <a href=http://www.yahoo.com>yahoo</a>', + + 'parens in uri http://thedailywtf.com/Articles/A-(Long-Overdue)-BuildMaster-Introduction.aspx' => + 'parens in uri <a href="http://thedailywtf.com/Articles/A-(Long-Overdue)-BuildMaster-Introduction.aspx" rel="nofollow">http:/<wbr />/<wbr />thedailywtf.com/<wbr />Articles/<wbr />A-(Long-Overdue)-BuildMaster-Introduction.aspx</a>' ); foreach ($cases as $input => $output) { $this->assertEqual($output, parse_urls($input)); |