在JavaScript中使用引号

我从数据库中输出数据(这个数据并不是公开的,但是公司的用户可以进入,也就是说,我并不担心XSS) 。

我试图输出这样的标签:

<a href="" onclick="DoEdit('DESCRIPTION');">Click Me</a> 

描述实际上是数据库中的一个值,就像这样:

 Prelim Assess "Mini" Report 

我已经尝试用“\”replace,但无论我尝试什么,Firefox都会在评估之后的空格后断开我的JavaScript调用,并导致各种问题。

我必须承认明显的答案,但是对于我的生活,我无法弄清楚。

任何人都在意指出我的白痴?

这里是整个HTML页面(它最终将成为一个ASP.NET页面,但为了解决这个问题,我拿出了除了问题代码之外的所有东西)

 <html> <body> <a href="#" onclick="DoEdit('Preliminary Assessment \"Mini\"'); return false;">edit</a> </body> </html> 

您需要将您正在编写的string转义为DoEdit来擦除双引号字符。 它们导致onclick HTML属性过早closures。

使用JavaScript转义字符\ ,在HTML上下文中是不够的。 您需要用正确的XML实体表示来replace双引号, &quot;

&quot; 在这个特定的情况下,正如我以前所build议的,因为HTML上下文。

但是,如果您希望自己的JavaScript代码在任何上下文中独立转义,则可以select原生JavaScript编码:
'变成\x27
"变成\x22

所以你的onclick会变成:
DoEdit('Preliminary Assessment \x22Mini\x22');

例如,当将JavaScriptstring作为parameter passing给另一个JavaScript方法( alert()对此是一个简单的testing方法)时,这也是有效的。

我指的是你的重复堆栈溢出问题, 我如何转义一个onClick处理程序内的JavaScript代码中的string?

 <html> <body> <a href="#" onclick="DoEdit('Preliminary Assessment &quot;Mini&quot;'); return false;">edit</a> </body> </html> 

应该做的伎俩。

在JavaScript中,已经有了对unescaping的unescapefunction:

 <script type="text/javascript"> var str="this is \"good\""; document.write(unescape(str)) </script> 

问题是HTML不能识别转义字符。 您可以通过使用HTML属性的单引号和onclick的双引号来解决此问题。

 <a href="#" onclick='DoEdit("Preliminary Assessment \"Mini\""); return false;'>edit</a> 

如果你用Java组装HTML,你可以使用Apache commons-lang中的这个很好的工具类来正确地转义所有的东西:

org.apache.commons.lang.StringEscapeUtils
用于Java,Java Script,HTML,XML和SQL的Escape和unescapesstring。

我做了一个使用jQuery的示例

 var descr = 'test"inside"outside'; $(function(){ $("#div1").append('<a href="#" onclick="DoEdit(descr);">Click Me</a>'); }); function DoEdit(desc) { alert ( desc ); } 

这可以在Internet Explorer和Firefox中使用。

转义空格也是。 这听起来像Firefox假设三个参数,而不是一个。 &nbsp; 是不间断的空间字符。 即使不是全部问题,也可能是一个好主意。

这是我如何做,基本上str.replace(/[\""]/g, '\\"')

 var display = document.getElementById('output'); var str = 'class="whatever-foo__input" id="node-key"'; display.innerHTML = str.replace(/[\""]/g, '\\"'); //will return class=\"whatever-foo__input\" id=\"node-key\" 
 <span id="output"></span> 

你需要用双反斜杠来引号。

这失败了(由PHP的json_encode产生):

 <script> var jsonString = '[{"key":"my \"value\" "}]'; var parsedJson = JSON.parse(jsonString); </script> 

这工作:

 <script> var jsonString = '[{"key":"my \\"value\\" "}]'; var parsedJson = JSON.parse(jsonString); </script> 

请在下面的代码中find使用正则expression式作为inputstring的一部分转义单引号。 它validation如果用户input的string是逗号分隔的,同时它甚至可以转义作为string的一部分input的任何单引号。 为了逃避单引号,只需input反斜杠后跟单引号,例如: \'作为string的一部分。 我使用JQueryvalidation器来处理这个例子,你可以使用你的传输。

有效string示例:

'你好'

'你好,世界'

'你好,世界'

'你好,世界',' '

“这是我的世界”,“没有我就不能享受”,“欢迎,客人”

HTML:

 <tr> <td> <label class="control-label"> String Field: </label> <div class="inner-addon right-addon"> <input type="text" id="stringField" name="stringField" class="form-control" autocomplete="off" data-rule-required="true" data-msg-required="Cannot be blank." data-rule-commaSeparatedText="true" data-msg-commaSeparatedText="Invalid comma separated value(s)."> </div> </td> 

JavaScript的:

  /** * * @param {type} param1 * @param {type} param2 * @param {type} param3 */ jQuery.validator.addMethod('commaSeparatedText', function(value, element) { if (value.length === 0) { return true; } var expression = new RegExp("^((')([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.\\-_\\[\\]\\)\\(]+([^\'\\\\]*(?:\\\\.[^\'\\\\])*)('))(((,)|(,\\s))(')([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.\\-_\\[\\]\\)\\(]+([^\'\\\\]*(?:\\\\.[^\'\\\\])*)('))*$"); return expression.test(value); }, 'Invalid comma seperated string values.');