1

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

http://なしでアドレスにリンクすると、そのリンクは内部として取得されます

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

http://mysite.com/thiersite.comのようなものに人々を送る

私が試したもう1つのオプションは、mysite.com /?link = theirsite.comのようなものにリンクすることです。この方法で、リンクトラッキングなどを実行して、ユーザーをリンクにリダイレクトできますが、同じ問題が発生します。

//do some tracking etc here
$link =$_GET['link'];
header("Location: $link");
4

7 に答える 7

8

ここで正規表現を使用する必要はありません。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 には、これらのシナリオに対処するための多くのメソッドが組み込まれています。

-マシュー

于 2009-04-29T14:43:12.550 に答える
2

との間には実際の違いがwww.site.comあり、通常は両方とも機能しますが、一部のWebサイトでは、それぞれが異なるパスにつながります(たとえばsite.com、一部の不適切に定義されたWebサイトは機能しません)。wwwしたがって、入力の前に常に「www」を付けることはできません。

' http://'別の注意点として、追加のスペースが追加されないように、追加のスペースを処理してくださいhttp://

私のJavascript正規表現ベースのソリューション

'http://'+field.replace(/^ *http:\/\//,'')

クライアントサイズで、フォームに同様の精神でコードを配置するだけであることを確認できonSubmitます。

于 2009-04-29T14:07:05.553 に答える
2

デフォルトで「http://」をフィールドに入力し、次のような URL を検証します。

if(eregi("^((http|https)://)?([[:alnum:]-])+(\.)([[:alnum:]]){2,4}([[:alnum:]/+=%&_.~?-]*)$", stripslashes(trim($_POST['link'])))){
    //link is valid
}

リンクが検証されない場合は、「入力したリンクは無効です。「http://」で始まることを確認してください」というメッセージを印刷してください。

于 2009-04-29T14:02:12.337 に答える
2

私は次のようなものを使用します:

$link = str_replace(array("\r", "\n"), '', trim($link));
if (!preg_match('/^https?:\/\//', $link)) {
    $link = 'http://'.$link;
}
header('Location: '.$link);

別の方法は、指定された URL を解析し、欠落している部分を確認して追加するparse_url関数です。

于 2009-04-29T14:05:41.830 に答える
0

私はいくつかの検証または衛生状態を提供します。正規表現を使用して、http://が正規表現で始まるかどうかを確認します。そうでない場合は、検証エラーをスローするか、先頭にhttp://を置きます。

于 2009-04-29T13:57:08.777 に答える
0
if not "://" in users_url:
    users_url = "http://" + users_url

...または同等の、選択した言語で。

于 2009-04-29T13:57:53.673 に答える
0

正規表現を使用して入力をテストできます

Regex exp = new Regex(
    @"http://(www\.)?([^\.]+)\.com",
    RegexOptions.IgnoreCase);
于 2009-04-29T13:58:02.050 に答える