2015-02-09 84 views
0

用户可以将文件上传到我的网站。URL中的非法字符

我已经检查了堆栈溢出并查找了有关非法URL地址的各种讨论。

当用户上传文件时,我希望删除任何非法字符,有些网站建议使用FILTER_SANITIZE_URL,而其他网站则建议使用正则表达式。

我的问题是,最好的办法是什么?

+0

从什么中删除非法字符? – 2015-02-09 11:09:31

+0

他们都很好。使用最简单的方法。 – Daan 2015-02-09 11:09:50

+0

用户可能在其上传的文件中包含非法字符的文件(文件名保持不变)。其他用户可以在网站上访问它。如果它包含非法字符它不会工作。 – panthro 2015-02-09 11:10:29

回答

1

PHP内置了FILTER_SANITIZE_URL。通常认为使用内置函数(可用时)是最佳实践,而不是试图自己重新实现它们。

如果在保存文件名前对文件名执行此功能,则在URL中显示它们时应该没有问题。

E.g. $filename = filter_var($_FILES['name'], FILTER_SANITIZE_URL);

+0

我试过这个,但不幸的是,它仍然允许非法字符,如#和< – panthro 2015-02-09 12:09:29

+0

@panthro从PHP [文档](http://''除去字母,数字和$ -_。+!*'(),{} | \\ ^〜[] \]#%“; /?:@&='这是因为这些字符不是非法的,并且被允许在一个URL中,如果你想完全定义一个URL允许的内容,请阅读这个:[RFC3986](http: /www.ietf.org/rfc/rfc3986.txt) – 2015-02-09 13:04:19

+0

@panthro如果你想消除不合法的特定字符,我会建议首先运行'FILTER_SANITIZE_URL'去除非法字符,然后使用正则表达式来删除/替换您不希望在您的网址中添加其他字符。 – 2015-02-09 13:14:27