如何在链接之前自动附加“http://”,然后再将它们保存到数据库中?

时间:2011-02-14 11:07:52

标签: php html http web-applications

我正在开发一个基于PHP的Web应用程序,其中您有一个带有textarea输入的表单,可以通过锚标签接受链接。但是当我按照以下方式添加超链接后测试它时,它指向一个不存在的本地子目录:
<a href="www.link.com">link</a>
我意识到这是因为我没有在链接之前添加http://

可能存在用户可能像我上面那样输入链接的情况。在这种情况下,我不希望链接像上面那样指向。是否有任何可能的解决方案,例如在链接之前自动附加http://以防它不存在?我该怎么做?
- - - - - - - - - - - - - - - - - - - - 编辑 - - - - - ------------------------------------
请考虑锚标记在其他明文中,这使得事情更难以使用。

2 个答案:

答案 0 :(得分:5)

我会选择这样的事情:

if (!parse_url($url, PHP_URL_SCHEME)) {
    $url = 'http://' . $url;
}

这是一种检查网址中是否存在协议的简单而稳定的方式,并允许其他人(例如ftphttps)进入。

答案 1 :(得分:1)

您所谈论的内容包括两个步骤:URL检测和URL规范化。首先,您必须检测要解析的字符串中的所有URL,并将它们存储在数据结构中以便进一步处理,例如数组。然后,您需要迭代数组并依次规范化每个URL,然后再尝试存储它们。

不幸的是,检测和规范化都可能存在问题,因为URL具有非常复杂的结构。 http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/提出了一些建议,但正如网页本身所说,没有正则表达式网址检测是完美的。

有一些正则表达式可以检测各种站点提供的URL,但根据我的经验,它们都不是完全可靠的。

至于规范化,维基百科有一篇关于这个主题的文章可能是一个很好的起点。 http://en.wikipedia.org/wiki/URL_normalization