-5

Web サイトの検証を見つけました。しかし後で、いくつかの変更を加え、特別なソーシャル ネットワーク (facebook、twitter、plus.google) 検証を追加する必要がありました。

これは私が持っているものです:

function isValidUrl($url,$media) {

$url= strtolower($url);
// Scheme
$urlregex = "^(https?)\:\/\/";
// User and Pass (optional)
if (!isset($media)) {
    $urlregex .= "([A-Za-z0-9+!*(),;?&=\$_.-]+(\:[A-Za-z0-9+!*(),;?&=\$_.-]+)?@)?";
}
// Hostname
if (isset($media)) {
    if ($media == 'fb') { $urlregex .= "([facebook]+\.)"; }
    else if ($media == 'gplus') { $urlregex .= "([plus\.google]+\.)"; }
    else if ($media == 'twitter') { $urlregex .= "([twitter]+\.)"; }
} else {
    $urlregex .= "([A-Za-z0-9+\$_-]+\.)";
}
$urlregex .= "*(?:[A-Za-z]{2}|com";
if (!isset($media)) {
    $urlregex .= "|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum|cat|coop|int|pro|tel|travel|xxx";
}
// Hostname End
$urlregex .= ")";
// Port/Path (optional)
$urlregex .= "(\:[0-9]{2,5})?";
$urlregex .= "(\/([A-Za-z0-9+\$_-]\.?)+)*\/?";
// Query
$urlregex .= "(\?[A-Za-z+&\$_.-][A-Za-z0-9;:@/&%=+\$_.-]*)?";
// Anchor
$urlregex .= "(#[A-Za-z_.-][A-Za-z0-9+\$_.-]*)?\$^";
return preg_match($urlregex,$url);

}

シンプルなウェブサイトは問題なく検証されていますが、ソーシャル ネットワークは私が望んでいる方法ではありません。たとえばhttp://facebook.comは有効ですが、 のような URL を有効にする必要がありhttp://facebook.com/something、最初の URL を無効にする必要があります ( と も同様http://twitter.com) http://plus.google.comhttp://plus.google.com検証は機能せず、他の融合を許可しhttp://plusgoogle.comます。

変更/追加したいこと:

1) ソーシャル ネットワーク (facebook、gplus、twitter) の検証を上記のように修正します。

2) プロトコルを使用しない URLhttp://またはプロトコルを使用する URL とその両方を許可するため、との方法でwww.リンクhttp://stackoverflow.comが許可されるようにします。http://www.stackoverflow.comstackoverflow.comwww.stackoverflow.com

編集:明確にするために、この関数を以下のように呼び出します。

$error = false;

// For simple URL
$url = $_POST['url'];
if (!isValidURL($url,NULL)) { $error = true; }

// For Facebook URL
$fbpage = $_POST['fbpage'];
if (!isValidURL($fbpage,'fb')) { $error = true; }

// For Twitter URL
$twitterpage = $_POST['twitterpage'];
if (!isValidURL($twitterpage,'twitter')) { $error = true; }

// For Google Plus URL
$gpluspage = $_POST['gpluspage'];
if (!isValidURL($gpluspage,'gplus')) { $error = true; }
4

2 に答える 2

2

超複雑な正規表現を廃止し、組み込み関数を使用します。

define('VALIDATE_URL_GENERAL', 1);
define('VALIDATE_URL_FACEBOOK', 2);
...

function validateURL($url, $type = VALIDATE_URL_GENERAL) {
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }

    $parts = parse_url($url);

    switch ($type) {
        case VALIDATE_URL_GENERAL :
            return true;

        case VALIDATE_URL_FACEBOOK :
            return $parts['host'] == 'facebook.com';

        ...
    }
}

これですべてを網羅しているわけではありませんが、理解していただければ幸いです。詳細については、を参照parse_urlしてください。

于 2012-11-28T14:32:37.503 に答える
1

URLを「ping」することを検討しましたか

file_get_contents(yourUrl).

ただし、カスタム 404 はあなたを刺します。

于 2012-11-28T14:18:43.617 に答える