Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的转义字符?_Javascript - Fatal编程技术网

JavaScript中的转义字符?

JavaScript中的转义字符?,javascript,Javascript,我正在创建一个这样的文件名 var name = $('#top-line').val(); var fname = random+'-'+name+'-something'; 这里fname是文件名。我不知道用户可能会在顶行输入什么,我如何才能避开字符以确保安全。 我试着用一个$top行=其他东西,结果把事情搞砸了 从我读到的评论中,我明白了这一点 escape("Need tips? Visit W3Schools!") will produce Need%20tips%3F%20Visi

我正在创建一个这样的文件名

var name = $('#top-line').val();
var fname = random+'-'+name+'-something';
这里fname是文件名。我不知道用户可能会在顶行输入什么,我如何才能避开字符以确保安全。 我试着用一个$top行=其他东西,结果把事情搞砸了

从我读到的评论中,我明白了这一点

escape("Need tips? Visit W3Schools!") will produce
Need%20tips%3F%20Visit%20W3Schools%21 
我怀疑这个文件是否会被保存为

Need%20tips%3F%20Visit%20W3Schools%21
如果有人写信呢 逃避/需要提示?参观学校

在服务器上编辑我保存的文件如下

$name = uniqid('somevalue',true);
$file = 'usermemes/' . $name . '.jpeg';
在用户计算机上,它们具有用户提供的名称。

您希望在服务器上执行此操作。原因如下:即使您的JavaScript被缩小了,也要记住理论上任何人都可以查看和修改您的脚本。你可以编写一个很好的例程来检查坏字符,确保用户没有做任何注入操作,并将输入转换为服务器操作系统的好文件名,但是如果有人真的有动机,他们可以下载你页面的本地副本,编辑脚本,并向服务器发送任意数量的恶意请求

在客户端执行一些基本的转义是合理的,如-请参阅以了解详细信息,但您需要在服务器上执行真正的工作。不要只接受用户输入,将其放入文件名字符串,然后保存到服务器上。它可以像一组str_replace调用或检查允许字符的正则表达式一样简单。你只想确保你在用户看不见的地方做


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

使用空字符串初始化名称变量

var name= "";
name="Need tips? Visit W3Schools!";
javascript将把所有内容都当作一个字符串,不管它是转义还是什么。 甚至

唯一的问题是你需要注意双引号 所以它可以被移除。完全像这样

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

或者使用此命令编写一个逻辑,提醒用户不要输入双引号

您将根据用户输入在服务器上实际创建文件的可能重复项?您需要在服务器上执行此类操作,以便恶意用户不会破坏您的服务器。不清楚您需要什么-您是否以查询字符串的形式将此字符串发送到服务器?是否使用此名称在服务器上保存文件?是否将其插入数据库查询?请看,但@atmd是对的-您可能希望在服务器上执行此操作。是的,我正在服务器上保存文件的一个副本,用户可以下载另一个副本。我没有在服务器上使用用户名保存文件。用户提供的文件名用于在其设备上保存文件。我对我的问题进行了编辑,以包含更多细节。请再看一下重新定义的问题。更新了我的答案。希望有帮助。我不想为用户添加额外的步骤。我尝试了var name=$'top-line'.val;name.replace/[']+/g;但当我输入某些内容时,文件仍然保存,没有扩展名else@Asain您需要使用replace like name=name.replace/[']+/g的返回值;谢谢@fgb,我真是个笨蛋。我还有一个疑问。如果我使用var name=;变量名称=$'top-line'.val;name=name.replace/[']+/g;var fname=random+'-'+name+'-something';它能解决每个字符的问题吗?将name.replace/[']+/g;替换所有有问题的双引号?是的。。但您甚至无法获得用户也需要的双引号。。简单无双引号。。我认为所有平台在命名文件时都不支持双引号。
var name= "";
name="Need\\ tips? Vis\\it W3\\School\\s!";
var name= "";
var name = $('#top-line').val();
name.replace(/['"]+/g, '');