繁体   English   中英

在JavaScript中转义字符?

[英]Escape characters in JavaScript?

我正在创建这样的文件名

var name = $('#top-line').val();
var fname = random+'-'+name+'-something';

fname是文件名。 我不知道用户可能会在#top-line中输入什么内容,如何确定字符的安全性来逃避这些字符。 我用$top line = somethin "else"尝试了一下,事情变得一团糟。

从我读到的评论中,我了解到

escape("Need tips? Visit W3Schools!") will produce
Need%20tips%3F%20Visit%20W3Schools%21 

我的疑问是文件是否将另存为

Need%20tips%3F%20Visit%20W3Schools%21

如果有人写转义符(/需要提示?访问W3Schools!”)

在服务器上编辑我正在保存文件

$name = uniqid('somevalue',true);
$file = 'usermemes/' . $name . '.jpeg';

在用户计算机上,它们具有用户提供的名称。

您要在服务器上执行此操作 原因如下:即使您的JavaScript很小,也请记住,从理论上讲,任何人都可以查看和修改您的脚本。 您可以编写一个很棒的例程来检查不良字符,确保用户没有进行任何“注入”操作,并将输入内容转换为服务器操作系统的良好文件名,但是如果有人真的有动力,他们可以下载本地文件。复制页面,编辑脚本并根据需要触发对服务器的恶意请求。

在客户端进行一些基本的转义是合理的(例如encodeUri-有关详细信息,请参见此答案 ),但是您需要在服务器上进行实际工作。 不要仅仅接受用户输入,将其输入文件名字符串,然后保存在服务器上。 它可以很简单,例如一组str_replace调用或一个检查允许字符的正则表达式。 您只想确保在用户看不见的地方进行操作。

编辑 :如果您只是在本地使用用户输入的名称,那么我将使用encodeURIComponent并按照Prabhu的建议使用正则表达式删除单引号和双引号。 (但是为什么不将文件以唯一的名称保存在服务器上,然后让用户下载呢?

用空字符串启动“名称”变量

var name= "";
name="Need tips? Visit W3Schools!";

并且javascript会将“一切”作为字符串,无论它是转义符还是其他内容。 甚至

var name= "";
name="\Need tips? Visit W3Schools!\";

要么

var name= "";
name="Need\\ tips? Vis\\it W3\\School\\s!";

唯一的事情是您需要注意双引号,以便可以将其删除。 所以完全像这样

var name= "";
var name = $('#top-line').val();
name.replace(/['"]+/g, '');

或通过使用此逻辑来提醒用户不要输入双引号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM