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 の始まりであることを確認し、そうでない場合は追加することを意味します。

誰かがこれを行うための他のオプションに光を当てることができますか. より効率的で効率的な方法がないかどうかを知りたいと思っています。

また、可能な限り最善の方法で実行していることが判明した場合は、他の人がこの文字列関数に何を使用しているかを知りたいです。

ありがとうスタックフレンズ。

4

2 に答える 2

1

$unknownlinkこのコードは、スキーム (プロトコル) なしで http:// を強制します。

$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 に答える
1

これは、標準で定義されているように URL を解決する方法である「Joomla」の動作ではありません。あなたが話しているのは、ブラウザーなどが相対または絶対 URL を処理する方法です。

この行動を変えることは、悲しみにつながる可能性が高いだけです。

URLは、識別子を表す文字列です。

URL は、相対 URL または絶対 URL のいずれかです。どちらの形式の後にもフラグメントを続けることができます。

相対 URLは、スキームのないURLです。相対 URL は、ベース URL に対して相対的でなければなりません。

絶対 URLはスキームを持つ URL です。

ベース URLは、相対スキームを持つ絶対 URL です。

この詳細については、 http: //url.spec.whatwg.org/#urlsを参照してください。

于 2013-09-18T21:50:37.913 に答える