0

朋友们,

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

// 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

当然,我知道在 href 前面加上 http:// 可以解决这个问题。然而,对于用户提交的内容,这意味着调用基于字符串的方法来检查用户提交的链接,以确保 http://(或 https 等)是 url 的开头,如果不是,则附加它。

有人可以阐明这样做的其他选择。我希望找出是否有更好、更有效的方法。

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

谢谢 Stackfriends。

4

2 回答 2

1

这不是标准定义的 URL 解析方式的“Joomla”行为。您在谈论的是浏览器等应该如何处理相对或绝对 URL。

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

URL是表示标识符的字符串。

URL 是相对 URL 或绝对 URL。任何一种形式都可以后跟一个片段。

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

绝对 URL是带有方案的 URL 。

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

您可能想在http://url.spec.whatwg.org/#urls阅读更多内容

于 2013-09-18T21:50:37.913 回答
1

此代码将强制 http:// 对于$unknownlink没有方案(协议):

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

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

于 2015-04-13T08:55:37.690 回答