У меня есть следующий код:
<?php $pictureurl="http://img.ruphp.com/php/poolbird.png"; if(filter_var($pictureurl, FILTER_VALIDATE_URL) === FALSE){ echo "Invalid Url"; exit; }else{ echo "Works!"; } ?>
Это отображение «неверный URL» (FALSE) для вышеуказанного URL-адреса, но не для других простых URL-адресов. Это ошибка? вы даже можете получить доступ к изображению.
И самое главное, для чего это решение?
благодаря
PHP <5.2.13 содержит ошибку в FILTER_VALIDATE_URL
которая рассматривает URL-адреса, содержащие '-' ( http://bugs.php.net/51192 ). Вам либо нужно обновить свою копию php, либо использовать другой механизм фильтрации.
Этот код печатает «Works!». для меня. Какую версию PHP вы используете? Можете ли вы опубликовать ссылку на страницу PHP, содержащую:
<?php phpinfo(); ?>
Также см. Этот вопрос .
Запуск PHP 5.2.13, я получаю этот ответ при попытке фильтровать действительный URL-адрес:
php > var_dump(filter_var("http://www.asdf-asdf.com", FILTER_VALIDATE_URL)); bool(false)
Это явно не то, что я ожидал, что он вернется. Домен действителен.
Это, очевидно, теперь исправлено и будет включено в PHP 5.3.3 и 5.2.14, больше информации в этом сообщении: http://bugs.php.net/bug.php?id=51192
Исходный архив из http://www.php.net/get/php-5.3.2.tar.bz2/from/a/mirror содержит странную версию ext / filter / logical_filter.c, версию я не могу найти в cvs . Эта версия выполняет «дополнительный» тест на главной части URL-адреса
e = url->host + strlen(url->host); s = url->host; while (s < e) { if (!isalnum((int)*(unsigned char *)s) && *s != '_' && *s != '.') { goto bad_url; } s++; }
который не позволяет дефис в имени хоста, как в icons3.iconfinder.netdna – cdn.com
Очень странно и очень неправильно.