如何验证字符串以检查URL是否安全。文件名中没有空格或特殊字符可能会破坏gmail中的URL。
例如:data/Logo - free.png
无效
我只想:"a-z", "0-9", ".", "-", "_"
这里有数百个验证URL的问题,但它们似乎都检查它是否包含我不需要的“http”。
使用工作代码更新(来自@minitech):
// validate filename
if (preg_match('/[^\w.-]/', basename($logo))){
$error = true
}
答案 0 :(得分:4)
我不是正则表达式的忠实粉丝因此我修复了PHP的内部filter_var,它似乎与相对URL有问题。我使用此解决方法:
function isValid($url)
{
if (parse_url($url, PHP_URL_SCHEME) != '') {
// URL has http/https/...
return !(filter_var($url, FILTER_VALIDATE_URL) === false);
}else{
// PHP filter_var does not support relative urls, so we simulate a full URL
// Feel free to replace example.com with any other URL, it won't matter!
return !(filter_var('http://www.example.com/'.ltrim($url,'/'), FILTER_VALIDATE_URL) === false);
}
}
PS:注意filter_var中的安全问题:https://d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/
答案 1 :(得分:1)
答案 2 :(得分:0)
使用此正则表达式检查有效文件名
^.*/[\w.-]+$