URL с проверкой строки запроса с использованием PHP - PullRequest
3 голосов
/ 14 декабря 2011

Мне нужна функция проверки PHP для URL со строкой запроса (параметры разделены с &).в настоящее время у меня есть следующая функция для проверки 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.Пожалуйста помоги.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

Простой 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 содержал строку запроса.

0 голосов
/ 14 декабря 2011

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

Некоторые могут подумать, что это не 100% пуленепробиваемое,
, но вы можете попробовать в качестве начала

...