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.