Webアドレスにhttpが表示されることを確認する
質問
ウェブサイトのアドレスを投稿する人がいますが、次のようなバリエーションが投稿されています:
- theirsite.com
- www.theirsite.com
- http://theirsite.com
- http://www.theirsite.com
http://を使用せずにアドレスにリンクすると、内部リンクとして使用されます
<a href="theirsite.com">their site</a>
http://mysite.com/thiersite.com のように人々を送るp>
私が試した別のオプションは、mysite.com /?link = theirsite.comのようなものにリンクすることです-この方法でリンクトラッキングを行うなどして、人々をリンクにリダイレクトできますが、同じ問題があります:
//do some tracking etc here
$link =$_GET['link'];
header("Location: $link");
解決
ここで正規表現を使用する必要はありません。 PHPにはURL検証が組み込まれています。
var_dump((bool) filter_var('http://www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('http://website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
var_dump((bool) filter_var('website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
出力
bool(true)
bool(true)
bool(false)
bool(false)
検証のために正規表現に直接ジャンプしないでください。PHPには、これらのシナリオに対処するための多くのメソッドが組み込まれています。
-マシュー
他のヒント
put <!> quot; http:// <!> quot;デフォルトでフィールドに入力してから、次のようなURLを検証します
if(eregi("^((http|https)://)?([[:alnum:]-])+(\.)([[:alnum:]]){2,4}([[:alnum:]/+=%&_.~?-]*)$", stripslashes(trim($_POST['link'])))){
//link is valid
}
リンクが検証されない場合は、<!> quot;入力したリンクが無効であるというメッセージを印刷するだけで、「http://」<!> quot;で始まることを確認してください
www.site.com
とsite.com
の間には実際の違いがあり、通常は両方とも機能しますが、一部のWebサイトではそれぞれ異なるパスになります(たとえば、www
がないと正しく定義されていないWebサイトは動作しません) 。そのため、入力に常に「www」を追加することはできません。
もう1つ注意してください。スペースを先頭に追加して、' http://'
の前にhttp://
を追加しないようにします。
Javascript Regexベースのソリューション
'http://'+field.replace(/^ *http:\/\//,'')
クライアントのサイズで、フォームのonSubmit
に同様の精神でコードを置くだけで確認できます。
次のようなものを使用します:
$link = str_replace(array("\r", "\n"), '', trim($link));
if (!preg_match('/^https?:\/\//', $link)) {
$link = 'http://'.$link;
}
header('Location: '.$link);
別の方法として、 parse_url
関数を使用して、指定されたURLを解析し、どの部分かを確認します欠落して追加します。
検証または衛生設備を提供します。正規表現を使用して、http://で始まるかどうかを確認します。そうでない場合は、検証エラーをスローするか、http://を先頭に配置します。
if not "://" in users_url:
users_url = "http://" + users_url
選択した言語の...または同等のもの。
正規表現を使用して入力をテストできます
Regex exp = new Regex(
@"http://(www\.)?([^\.]+)\.com",
RegexOptions.IgnoreCase);