3

クエリ文字列 (& で区切られたパラメータ) を含む URL の PHP 検証関数が必要です。現在、URLを検証するための次の機能があります

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';

echo preg_match($pattern, $url);

この関数は、次のような入力を正しく検証します

google.com www.google.com http://google.com http://www.google.com...等

ただし、パラメーター (クエリ文字列) が含まれている場合、これは URL を検証しません。たとえば。

http://google.com/index.html?prod=gmail&act=inbox

両方のタイプの URL 入力を受け入れる関数が必要です。助けてください。前もって感謝します。

4

2 に答える 2

2

シンプルなfilter_var

if(filter_var($yoururl, FILTER_VALIDATE_URL))
{
  echo 'Ok';
}

うまくいくかもしれませんが、URL がスキーマの前にないと問題があります: http://codepad.org/1HAdufMG

http://を配置せずに URL の前に配置することで、問題を回避できます。
@DaveRandom で提案されているように、次のようなことができます。

$parsed = parse_url($url); 
if (!isset($parsed['scheme'])) $url = "http://$url";

filter_var() 関数をフィードする前。

ただし、全体的には、非常に複雑な正規表現よりも単純なソリューションです..

また、次のフラグも使用できます。

FILTER_FLAG_PATH_REQUIRED FILTER_VALIDATE_URL URL にパス部分を含める必要があります。FILTER_FLAG_QUERY_REQUIRED FILTER_VALIDATE_URL URL にクエリ文字列を含める必要があります。

于 2011-12-14T13:21:15.653 に答える
0

http://php.net/manual/en/function.parse-url.php

これは 100% の防弾ではないと思う人もいるかもしれませんが
、まずは試してみてください。

于 2011-12-14T13:37:25.120 に答える