I've created a message system and would like to auto-convert url-links in a message to clickable HTML links if a new message is posted. I wrote this simple function but it isn't working as it should:
// LINK ALL URLS
$message = ereg_replace("http://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $message);
$message = ereg_replace("(^| |\n)(www([.]?[a-zA-Z0-9_/-])*)", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $message);
For some urls it is working, but with other urls there are problems and the results are like this:
<a href="http://www.example.com/index.php">http://www.example.com/index.php</a>?mode=index&page=1
or
<a href="http://www.youtube.com/watch">http://www.youtube.com/watch</a>?v=jSh5Y7jq9FQ
As you can see, it is not correctly converted inclusive the part behind the question mark. Can someone please fix / update my code above? And by the way, would there be perhaps another (and better!) solution instead of using *ereg_replace* ?
Your regex does not allow the ?
character, so of course the link cuts off before any query string. put ?
in your character class. While you're at it you also need to allow every single other valid URL character.
Consult this question and its answers for an idea of what makes a valid URL regex.