我正在开发一个基于PHP的Web应用程序,其中您有一个带有textarea输入的表单,可以通过锚标签接受链接。但是当我按照以下方式添加超链接后测试它时,它指向一个不存在的本地子目录:
<a href="www.link.com">link</a>
我意识到这是因为我没有在链接之前添加http://
。
可能存在用户可能像我上面那样输入链接的情况。在这种情况下,我不希望链接像上面那样指向。是否有任何可能的解决方案,例如在链接之前自动附加http://
以防它不存在?我该怎么做?
- - - - - - - - - - - - - - - - - - - - 编辑 - - - - - ------------------------------------
请考虑锚标记在其他明文中,这使得事情更难以使用。
答案 0 :(得分:5)
我会选择这样的事情:
if (!parse_url($url, PHP_URL_SCHEME)) {
$url = 'http://' . $url;
}
这是一种检查网址中是否存在协议的简单而稳定的方式,并允许其他人(例如ftp
,https
)进入。
答案 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