Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка ссылки на относительность\абсолютность
Форумы портала PHP.SU » » Вопросы новичков » Проверка ссылки на относительность\абсолютность

Страниц (1): [1]
 

1. LCarlo - 11 Октября, 2011 - 21:06:17 - перейти к сообщению
Здравствуйте ув. форумчане !

Как сделать функцию проверки ссылки на абсолютность ?
Вот то, что я пытался:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (preg_match ("/{^(\w*)?:[\/\/]}s", $что будет обрабатываться))
  3.     {
  4. функция, когда ссылка абсолютная
  5. }else{
  6. когда относительная
  7. }


Как не "крутил" - ничего не вышло ...

Без Вас - никак Закатив глазки
2. MCNet - 13 Октября, 2011 - 16:47:07 - перейти к сообщению
Для начала, чтобы лучше понимать критерии отбора, приведём несколько примеров абсолютных ссылок:

http://domain/
https://domain/
ftp://domain/

Похоже на то, что, все ссылки, в которых присутствует последовательность "://" можно считать абсолютными. Даже более того, последовательность можно сократить до знака ':'.

Значит:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (strpos($что_будет_обрабатываться, ':') === false) {
  3.     _call_rel_handler();
  4. } else {
  5.     _call_abs_handler();
  6. }
  7.  


Вариант не идеальный, т.к. пропустит ссылки вида http://domain/index/../style.css, но думаю идея понятна и с этим справишься сам Подмигивание
3. LIME - 13 Октября, 2011 - 17:17:45 - перейти к сообщению
MCNet если порт не встречается
если его учитывать лучше всеже :/
но тут еще надо виндовый слеш учесть
короче если что
вот регулярка для начального кода по этому принципу
#:[/|\]#
(Добавление)
MCNet пишет:
т.к. пропустит ссылки вида http://domain/index/../style.css
почему пропустит?
4. vasya1999 - 13 Октября, 2011 - 18:17:19 - перейти к сообщению
Могу предложить решение, которое я использовал в одном из своих проектов:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $testUrl = 'http://www.domain.ru/dir/dir?u=test';
  4.    
  5. if( preg_match('/^(http|https|ftp):\/\/([A-Z0-9])[A-Z0-9_-]*(\.?[A-Z0-9]+)+?/iU', $testUrl ) ) echo 'yes'; else echo 'no';
  6.  
  7.  


Данный код выведет 'yes' в том случае, если URL абсолютный и 'no', если вида /dir/dir?u=test
5. LCarlo - 13 Октября, 2011 - 19:10:36 - перейти к сообщению
vasya1999 пишет:
Могу предложить решение, которое я использовал в одном из своих проектов:

PHP:
скопировать код в буфер обмена



$testUrl = 'http://www.domain.ru/dir/dir?u=test';

if( preg_match('/^(http|https|ftp):\/\/([A-Z0-9])[A-Z0-9_-]*(\.?[A-Z0-9]+)+?/iU', $testUrl ) ) echo 'yes'; else echo 'no';





Данный код выведет 'yes' в том случае, если URL абсолютный и 'no', если вида /dir/dir?u=test


а можете поподробнее рассказать о переменной $testUrl (точнее о её корректном значении). При завершении кода постоянно выполняется функция "yes" . С кодом в 1-вом посте точно тоже самое было ...
(Добавление)
Всем огромнейшее спасибо за участие Радость ! Все работает Ха-ха

 

Powered by ExBB FM 1.0 RC1