0

提供された URL が現在ナビゲートされているものと一致するかどうかを検出する必要があります。以下はすべて有効ですが、意味的には同等の URL です。

https://www.example.com/path/to/page/index.php?parameter=value
https://www.example.com/path/to/page/index.php
https://www.example.com/path/to/page/
https://www.example.com/path/to/page
http://www.example.com/path/to/page
//www.example.com/path/to/page
//www/path/to/page
../../../path/to/page
../../to/page
../page
./

最終的な関数は、指定された URL が現在のページを指している場合、またはそうでない場合に返さなければなりません。予想される URL のリストがありません。これは、現在のページにリンクするときにリンクを無効にしたいクライアントに使用されます。これらはこのサイトの現在のページを示していないため、parameters を無視したいことに注意してください。次の正規表現を使用するところまで行きました:truefalse

/^((https?:)?\/\/www(\.example\.com)\/path\/to\/page\/?(index.php)?(\?.+=.*(\&.+=.*)*)?)|(\.\/)$/i

ここhttps?で、www\.example\.com\/path\/to\/page、およびindex.phpは動的に検出され$_SERVER["PHP_SELF"]、正規表現形式に変換されますが、 のような相対 URL とは一致しません../../to/page

編集:私は正規表現で少し先に進みました: refiddle.com/gv8 では、特定のページの正規表現を動的に作成するために PHP が必要なだけです。

4

4 に答える 4

0

すべてのクエリ パラメータを削除するのに正規表現は実際には必要ありません。使用できますstrok()

$url = strtok($url, '?');

そして、URL 配列の出力を確認するには:

$url_list = <<<URL
https://www.example.com/path/to/page/index.php?parameter=value
https://www.example.com/path/to/page/index.php    
...    
./?parameter=value
./
URL;

$urls = explode("\n", $url_list);
foreach ($urls as $url) {
    $url = strtok($url, '?'); // remove everything after ?
    echo $url."\n";
}

機能として(改善される可能性があります):

function checkURLMatch($url, $url_array) {
    $url = strtok($url, '?'); // remove everything after ?
    if( in_array($url, $url_array)) {
        // url exists array
        return True;
    } else {
        // url not in array
        return False;
    }
}

生で見よう!

于 2013-09-23T14:16:49.277 に答える