質問

ウェブサイトのアドレスを投稿する人がいますが、次のようなバリエーションが投稿されています:

http://を使用せずにアドレスにリンクすると、内部リンクとして使用されます

<a href="theirsite.com">their site</a>

http://mysite.com/thiersite.com

私が試した別のオプションは、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.comsite.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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top