Используя parse_url в php, как мы проверяем, является ли input URL-адресом или просто строкой - PullRequest
1 голос
/ 08 ноября 2011

Вот мой код

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="text"/>
<input type="submit" name="submit" value="submit"/>
</form>
<?php
if(isset($_POST['submit'])){
$url = $_POST['text'];
$parse = parse_url($url);
echo $parse['host'];
}
?>

Я использую parse_url, чтобы получить имя хоста, которое будет выводиться, когда кто-то вводит URL, теперь, если я пытаюсь ввести какой-либо ввод мусора, выдается ошибка: «Undefinedindex: host ", я хочу знать, как мы проверяем, является ли это действительным URL-адресом или просто строкой, прежде чем выводить вывод функции parse_url

Ответы [ 3 ]

6 голосов
/ 08 ноября 2011

Вы можете проверить, определен ли хост:

echo isset($parse['host']) ? $parse['host'] : 'Invalid input';

Или вы можете создать регулярное выражение, чтобы проверить, правильно ли отформатирована строка, которую вы передаете parse_url. Это немного сложнее, но можно сделать. См .: Анализ URL с помощью Regex с использованием PHP или Проверка URL PHP + обнаружение

1 голос
/ 08 ноября 2011

parse_url () вернет false, если переменная не может быть проанализирована как url.Проверка результата parse_url () для! == false позволит узнать, что строка была успешно проанализирована функцией и, следовательно, является действительным URL.

$parse = parse_url($url);
if($parse !== false)
{
    echo 'valid url';
    if(isset($parse['host'])) echo $parse['host'];
}

После этого вам решатьчто именно вы имеете в виду с "действительным URL".Функция parse_url в PHP сможет анализировать строку, которая является не чем иным, как просто путем.В зависимости от заданной проблемы / контекста, вы можете почувствовать, что «действительный URL» состоит как минимум из схемы + хоста, или в другом контексте может быть допустимым только относительный путь (без хоста).Добавление этих проверок в себя - просто проверка наличия ключа в разобранном массиве - может выглядеть так:

$parse = parse_url($url);
if($parse !== false)
{
    if(isset($parse['scheme']) && isset($parse['host']))
    {
        echo 'valid url';
        echo $parse['host'];
    }
}
1 голос
/ 08 ноября 2011

Используйте регулярное выражение

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="text"/>
<input type="submit" name="submit" value="submit"/>
</form>
<?php
if(isset($_POST['submit'])){
$url = $_POST['text'];

define('REGEX_URL','/http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/');

if(preg_match(REGEX_URL, $url, $url)) {
   echo "<a href=\"{$url[0]}\">{$url[0]}</a>";
} else {
   echo "<p>No Match Found</p>";
}
}
?>
...