我们应该在 Javascript 中用 encodeURIComponent 将文件名括起来吗?

Should we enclose filename with encodeURIComponent in Javascript?

我接受上传到我网站的文件。那么,对文件名进行编码 URIComponent 是否安全?或者我应该使用 escape()?或者有必要吗?

你永远不应该使用 escape 做任何事 (除非因为你要发送信息到将使用 unescape [不应该] 的东西而被迫这样做).

是否需要使用 encodeURIComponent 完全取决于您是否打算将文件名直接用作 URI 组件¹。如果是,是的,您应该使用它。如果你不是,不,你可能不应该。


¹ 例如,当您手动创建查询字符串时作为查询字符串参数,而不是通过 URLSearchParams(这通常是更好的做法)

encodeURIComponent 接受一个字符串并将其转义以使其安全地插入 URI,通常用于查询字符串数据。

如果要将字符串插入 URI,则可以使用它,但可能应该使用 URLSearchParams 来构造整个查询字符串。

如果您没有将字符串插入 URI,那么您可能不应该使用它。


escape 已弃用,不应使用。它不适用于 Unicode。属性。


接受文件的注意事项通常更像是“这会意外覆盖现有文件吗?”和“我的文件系统允许使用此文件名中的字符吗?”。

有些人喜欢生成一个全新的文件名(例如使用 guid 库)以确保其安全。您可以将原始名称存储在数据库中(此时您的转义应该由参数化查询处理)。