2013-06-17 31 views
8

私のウェブサイトでは、ユーザーはプロフィールにURLを入れることができます。HTMLリンクを強制的に強制する方法は?

このURLはhttp://www.google.comまたはwww.google.comまたはgoogle.comです。

PHPコード<a href="$url">$url</a>に挿入するだけでリンクが絶対的なものにならない場合があります。

aタグを絶対にするにはどうすればよいですか?

+2

常に接頭辞が「http://」(またはプロトコル相対リンクの場合は '/')であることを確認してください。 –

+1

window.locationを使用してみてください しかし、ユーザーの入力を検証するのがベストです。有効なURLを提供するようにプロンプ​​トします。 – ysrb

答えて

5

は、プロトコル、好ましくHTTPを使用://

<a href="http://www.google.com">Google</a> 

をこの形式でURLを入力するようユーザーに依頼、またはCONCATENATEのhttp://追加した場合ではありません。

3

最近似たようなことをしなければなりませんでした。

if (strpos($url, 'http') === false) { 
    $url = 'http://' .$url; 
} 

基本的に、URLに 'http'が含まれていない場合は、文字列(接頭辞)の先頭に追加します。

それとも正規表現

$http_pattern = "/^http[s]*:\/\/[\w]+/i"; 

if (!preg_match($http_pattern, $url, $match)){ 
    $url = 'http://' .$url; 
} 

でこれを行うことができますが間違いを指摘するために@JamesHiltonに感謝します。ありがとうございました!

+1

$ urlの先頭にhttpが見つかると、文字列 'http'の位置がインデックス0から始まるため、0を返しますので、常にfalseを返します.0はif文では偽と見なされるため、代わりに===演算子を使用してください。 –

+0

@JamesHiltonああちょっと恥ずかしい!修正しました、ありがとうございます! – StephanieQ

+0

"/^https?:\/{2} \ w/i" ' – eddy85br

6

URLの先頭に//という接頭辞を付けると、絶対URLとして扱われます。たとえば、

<a href="//google.com">Google</a>です。

これは、ページが提供されているのと同じプロトコルを使用します(例:ページのURLがhttps://path/to/pageの場合、結果のURLはhttps://google.comになります)。

+0

絶対URIが2つのスラッシュだけで指定されている場合は、現在のサイトのプロトコルは、プロファイルURLに接続するときに使用されます。つまり、https://yoursite.netはhttps://google.comに、http://yoursite.netはhttp://になります。 google.com –

+0

はい、問題のケースに合っています。ところであなたのリンクは壊れている(解析されている)。 –

+0

ウェブサイトのプロトコルがURLプロトコルと異なる場合、これは機能しません。あなたのウェブサイトがhttpsの場合、代わりにhttpsが与えられるため、http urlは機能しません。 – DeepBlue

関連する問題