正确的方法来逃避一个字符串

时间:2015-08-26 12:29:07

标签: javascript escaping backslash

我创建了#34;编辑评论"用于网站的javascript按钮。 实际上一切正常但字符串转义不起作用。 我只是尝试将编辑输入添加到

 <script> alert(user->id); </script>

它显示警报!

我试图做一些长时间的逃脱,如下所示,但他们没有改变任何东西,警报仍然出现:

 newComment.replace("'","\'");
 newComment.replace("\"","\\\"");
 newComment.replace("(","\(");
 newComment.replace(")","\)");
 newComment.replace("<","\<");
 newComment.replace(">","\>");
 newComment.replace(";","\;");

我也曾尝试使用 encodeURI ,但它仍然显示编码的评论,这些评论看起来并不好......

那么现在逃避字符串的正确方法是什么? 我正在阅读几十个类似的主题,但我根本不知道......

3 个答案:

答案 0 :(得分:1)

  

但他们不会改变任何东西

newComment.replace("'","\'");

你对这个功能的结果一无所知。相反,这样做

newComment = newComment.replace("'","\'");

另外,您可以将替换函数链接在一起,但请确保对结果执行某些操作,例如将其分配给变量,否则您将无效地执行任何操作

newComment = newComment.replace("'","\'").replace(...).replace(...);

答案 1 :(得分:0)

当您必须在应用程序的源代码中编写该字符时,才会使用字符串中的转义字符。它告诉解释器/编译器它不应该像正常的那样处理该字符而不应该遵守该语言的语法规则。例如:

// JavaScript引擎会将此解释为错误而不执行代码。

var newComment = 'test'';

//这样做:

var newComment = 'test\'';
\ p \ \告诉引擎&#34;嘿,不要用它来关闭字符串,把它作为一部分来对待。&#34;当用户在运行时输入文本时,引擎已经知道它不应该被解释为源,而是作为运行时值,因此在该场景中不需要转义它。

关于此代码的说明:

 newComment.replace("'","\'");
 newComment.replace("\"","\\\"");
 newComment.replace("(","\(");
 newComment.replace(")","\)");
 newComment.replace("<","\<");
 newComment.replace(">","\>");
 newComment.replace(";","\;");
  1. 字符串在JavaScript中是不可变的,因此newComment永远不会改变。您必须更改并指定newComment = newComment.replace('','');
  2. 每次使用replace函数时,它都会创建一个新字符串,因为字符串是不可变的。你必须要小心这一点,因为根据场景,这会产生很多开销。

答案 2 :(得分:0)

JavaScript字符串是不可变的。 所以你必须在调用replace后将它保存到变量中。

目前您只是调用替换功能但没有保存任何内容。

这是一个快速的帮助解释:https://jsfiddle.net/s13rboe5/

&#13;
&#13;
var a = "aaa"
var b = "bbb"

a.replace('a', 'b');
b = b.replace('b', 'a');

alert(a);
alert(b);
&#13;
&#13;
&#13;

另外here是一个帮助您了解javascript不变性的链接。