0

我将如何验证字符串以检查它对于 URL 是否安全。文件名中没有空格或特殊字符可能会破坏 gmail 中的 URL。

例如:data/Logo - free.png将是无效的

我只想:"a-z", "0-9", ".", "-", "_"

这里有数百个用于验证 URL 的问题,但它们似乎都在检查它是否包含我不需要的“http”。

更新工作代码(来自@minitech):

// validate filename
if (preg_match('/[^\w.-]/', basename($logo))){
    $error = true
}
4

3 回答 3

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/

于 2016-06-10T20:18:59.960 回答
1

只需从您列出的内容中获取它:

$valid = !preg_match('/[^\w.-]/', $name);

urlencode根据情况,您可能会考虑使用 转义它。

于 2012-12-16T16:58:41.977 回答
0

使用此正则表达式检查有效的文件名

 ^.*/[\w.-]+$
于 2012-12-16T16:59:58.137 回答