PHP FILTER_VALIDATE_URL过滤器经常会在校验URL时使用,但如果您没注意,可能就存在个小坑。
直接贴代码,一目了然。当子域名含下划线的时候,这个校验就不行了,所以如果存在子域名校验场景,FILTER_VALIDATE_URL可能不太适用。
<?php
$url1 = "https://www.example.com";
$url2 = "https://my_home.example.com";
$url3 = "https://www.example.com/index.html";
$url4 = "https://www.example.com/my_home.html";
if (!filter_var($url1, FILTER_VALIDATE_URL)) {
echo "URL1 is not valid" . PHP_EOL;
} else {
echo "URL1 is valid" . PHP_EOL;
}
if (!filter_var($url2, FILTER_VALIDATE_URL)) {
echo "URL2 is not valid" . PHP_EOL;
} else {
echo "URL2 is valid" . PHP_EOL;
}
if (!filter_var($url3, FILTER_VALIDATE_URL)) {
echo "URL3 is not valid" . PHP_EOL;
} else {
echo "URL3 is valid" . PHP_EOL;
}
if (!filter_var($url4, FILTER_VALIDATE_URL)) {
echo "URL4 is not valid";
} else {
echo "URL4 is valid";
}