2

私は自動サイトを持っていて、SAVE SEARCH という機能を持っています。これは、ユーザーがサイトで行った検索を将来の使用のために保存します。私がやっていることは、URL全体をデータベースに保存していることです。

しかし、有効な URL として検証する必要があります。このように見えます。

http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE

どうすればそれを達成できるかについて、誰かが私にアイデアを提供してもらえますか?

ここにある preg_match があります。

if (!preg_match('/^https?:(\/\/)?(www\.)?([a-zA-Z0-9_%]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', $fields[$field_name]))

ただし、http://www.anywebsite.comなどの URL のみを検証しますが、上記の URL 全体を検証する必要があります。

どんな助けでも大歓迎です。

4

3 に答える 3

4

filter_vars()他の回答で提案されているように、 with FILTER_VALIDATE_URLfilter を使用する必要があります。ただし、RegEx を使用する場合は、@Mathias Bynens による In search of the perfect URL validation regex ブログを参照する必要があります

すべての URL パターンをサポートする @diegoperini による正規表現を 1 つだけ追加します。

^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$

于 2013-03-25T04:45:03.093 に答える
3

URL 検証を手動でコード化する必要がある理由はありません。この問題は解決されています。

php を見てくださいfilter_var()

URL 検証の例: http://www.w3schools.com/php/filter_validate_url.asp

$url = "http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE";

if (!filter_var($url, FILTER_VALIDATE_URL)) {
  echo "URL is not valid";
}
else {
  echo "URL is valid";
}
于 2013-03-24T05:36:05.713 に答える
2

あなたができるのに、なぜ車輪を再発明するのですfilter_var()か?次に、フィルタを使用して PHP 5 >= 5.2.0 を指定します。また、ドメイン名が必要になるように追加することもできます。必要になると思われます。他のフラグをチェックして、必要かどうかを確認してください。FILTER_VALIDATE_URL filter_varFILTER_FLAG_HOST_REQUIRED

例:

$url = 'http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE';
if(filter_var($url, FILTER_VALIDATE_URL)){
    #do stuff here
}else{
    #invalid
}

作業例: http://ideone.com/N84VGF

古いバージョンの PHP を使用している場合は使用できますparse_url()が、実際の/有効な URL であるかどうかを検証しないため、正規表現/検証を追加する必要があります。

于 2013-03-24T05:37:49.857 に答える