【发布时间】:2013-06-13 09:37:35
【问题描述】:
我创建了一个消息系统,并希望在发布新消息时将消息中的 url 链接自动转换为可点击的 HTML 链接。 我写了这个简单的函数,但它不能正常工作:
// 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);
对于某些 url 它可以工作,但对于其他 url 则存在问题,结果如下:
<a href="http://www.example.com/index.php">http://www.example.com/index.php</a>?mode=index&page=1
或
<a href="http://www.youtube.com/watch">http://www.youtube.com/watch</a>?v=jSh5Y7jq9FQ
如您所见,它没有正确转换包括问号后面的部分。 有人可以修复/更新我上面的代码吗? 顺便说一句,除了使用 *ereg_replace* 之外,还有其他(更好的!)解决方案吗?
【问题讨论】:
-
自 PHP 5.3.0 起,该函数已被弃用。强烈建议不要依赖此功能。解决方法:使用
preg_replace() -
感谢您提供此信息,我知道它已被弃用,现在我只是在寻找快速修复,将来我将使用 preg_replace()。
-
@netsetter - 老实说,将 ereg 转换为 preg 非常容易。 99% 的情况只涉及更改函数名称并在字符串末尾添加分隔符。你真的应该这样做。此外,值得补充的是,它不仅在 5.3 中已弃用,而且已从 5.4 中完全删除。当您仍在运行同时支持两者的版本时,更改它会更容易很多(这就是执行弃用过程的原因),因此我强烈建议尽早更改它。
-
@Spudley:好的,如果你说转换非常容易,我现在会花时间更新代码。谢谢。
标签: php html url ereg-replace