我将如何验证字符串以检查它对URL是否安全。文件名中没有空格或特殊字符,这可能会破坏 gmail 中的网址。
例如:data/Logo - free.png
无效
我只想:"a-z", "0-9", ".", "-", "_"
这里有数百个验证 URL 的问题,但它们似乎都在检查它是否包含我不需要的"http"。
使用工作代码更新(从@minitech):
// validate filename
if (preg_match('/[^w.-]/', basename($logo))){
$error = true
}
我不是正则表达式的忠实粉丝,所以我修复了 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/
只是从你列出的内容中获取它:
$valid = !preg_match('/[^w.-]/', $name);
您可以考虑仅使用 urlencode
转义它,具体取决于情况。
使用此正则表达式检查有效的文件名
^.*/[w.-]+$