Joomla - 强制非http://预先固定的链接为外部的最有效方法

时间:2013-09-17 15:27:26

标签: php html joomla

我希望找到一种最有效的方法来选择锚标记,该标记将包含用户提交的链接以链接到外部网站,而不是错误地将其附加到当前网站网址的末尾。

// Explanation:

许多人都知道,在Joomla中编写链接时,如下所示:

<a href="google.com">Google</a>

<a href="<?=JRoute::_('google.com')?>">Google</a>

它将href附加到当前站点url。

例如,如果我的网站是http://www.stackoverflow.com/questions/ask

我点击上面的任一链接都会转到http://www.stackoverflow.com/questions/ask/google.com

...而不是看起来很自然,只是带我去google.com

// End Explanation

当然我知道将http://添加到href解决了这个问题。但是对于用户提交的内容,这意味着调用基于字符串的方法来检查用户提交的链接,以确保http://(或https等)是启动URL的内容,如果没有,则追加它。

有人可以解释其他选择。我希望找出是否有更好,更有效的方法。

另外,如果事实证明我是以最好的方式做到这一点,那么我很乐意看到其他人使用这个字符串函数。

谢谢Stackfriends。

2 个答案:

答案 0 :(得分:1)

这不是一个“Joomla”行为,就像标准所定义的URL的解决方式一样。您所谈论的是浏览器等应该如何处理相对或绝对URL。

改变这种行为是IMO只会导致悲伤。

  

网址是表示标识符的字符串。

     

网址是相对网址或绝对网址。两种形式都可以   然后是片段。

     

相对网址是没有方案的网址。相对URL必须是   相对于基本URL。

     

绝对网址是带有方案的网址。

     

基本网址是具有相对方案的绝对网址。

您可能希望在http://url.spec.whatwg.org/#urls

上阅读更多内容

答案 1 :(得分:1)

此代码将强制执行http:// for $unknownlink without scheme(protocol):

$link = JUri::getInstance($unknownlink);
if (!$link->getScheme()) $link->setScheme('http');
echo JHtml::link($link, $link, ['target' => '_blank']);

适用于J3.4,不确定旧版本