diff --git a/application/LinkUtils.php b/application/LinkUtils.php
index 976474d..267e62c 100644
--- a/application/LinkUtils.php
+++ b/application/LinkUtils.php
@@ -109,7 +109,7 @@ function count_private($links)
*/
function text2clickable($text, $redirector = '')
{
- $regex = '!(((?:https?|ftp|file)://|apt:|magnet:)\S+[[:alnum:]]/?)!si';
+ $regex = '!(((?:https?|ftp|file)://|apt:|magnet:)\S+[a-z0-9\(\)]/?)!si';
if (empty($redirector)) {
return preg_replace($regex, '$1', $text);
diff --git a/tests/LinkUtilsTest.php b/tests/LinkUtilsTest.php
index 7c0d4b0..c77922e 100644
--- a/tests/LinkUtilsTest.php
+++ b/tests/LinkUtilsTest.php
@@ -103,6 +103,16 @@ class LinkUtilsTest extends PHPUnit_Framework_TestCase
$expectedText = 'stuff http://hello.there/is=someone#here otherstuff';
$processedText = text2clickable($text, '');
$this->assertEquals($expectedText, $processedText);
+
+ $text = 'stuff http://hello.there/is=someone#here(please) otherstuff';
+ $expectedText = 'stuff http://hello.there/is=someone#here(please) otherstuff';
+ $processedText = text2clickable($text, '');
+ $this->assertEquals($expectedText, $processedText);
+
+ $text = 'stuff http://hello.there/is=someone#here(please)&no otherstuff';
+ $expectedText = 'stuff http://hello.there/is=someone#here(please)&no otherstuff';
+ $processedText = text2clickable($text, '');
+ $this->assertEquals($expectedText, $processedText);
}
/**