如何在onClick处理程序中的JavaScript代码中转义字符串?

也许我只是想这太难了,但我有一个问题搞清楚在链接的onClick处理程序内的一些JavaScript代码中使用字符串的内容。 例:

<a href="#" onclick="SelectSurveyItem('<%itemid%>', '<%itemname%>'); return false;">Select</a>

<%itemid%><%itemname%>是模板替换发生的地方。 我的问题是项目名称可以包含任何字符,包括单引号和双引号。 目前,如果它包含单引号,则会打破JavaScript代码。

我的第一个想法是使用模板语言的函数来JavaScript - 转义项名称,它只是转义引号。 这不会解决包含破坏链接HTML的双引号的字符串的情况。 这个问题通常如何解决? 我需要HTML转义整个onClick处理程序吗?

如果是这样,那看起来很奇怪,因为模板语言的转义函数也会将括号,引号和分号HTML化...

此链接正在为搜索结果页面中的每个结果生成,因此在JavaScript代码中创建单独的方法是不可能的,因为我需要为每个结果生成一个。

另外,我使用的模板引擎是在我工作的公司内部生成的,因此,针对特定工具包的解决方案对我来说毫无用处。


在JavaScript中,您可以将单引号编码为“ x27”,将双引号编码为“ x22”。 因此,使用这种方法,您可以在JavaScript字符串文字的(双引号或单引号)内引用 x27 x22而不用担心任何嵌入的引号“爆发”您的字符串。

xXX用于chars <127和用于Unicode的 uXXXX,因此具备这些知识,您可以为不在通常白名单中的所有字符创建强大的JSEncode函数。

例如,

<a href="#" onclick="SelectSurveyItem('<% JSEncode(itemid) %>', '<% JSEncode(itemname) %>'); return false;">Select</a>

根据服务器端语言的不同,您可以使用以下其中一种语言:

.NET 4.0

string result = System.Web.HttpUtility.JavaScriptStringEncode("jsString")

Java的

import org.apache.commons.lang.StringEscapeUtils;
...

String result = StringEscapeUtils.escapeJavaScript(jsString);

蟒蛇

import json
result = json.dumps(jsString)

PHP

$result = strtr($jsString, array('' => '\', "'" => "'", '"' => '"', 
                                 "r" => 'r', "n" => 'n' ));

Ruby on Rails

<%= escape_javascript(jsString) %>

对每个参数<%itemid%><%itemname%>分别使用隐藏跨度,并在其中写入它们的值。

例如, <%itemid%> <span id='itemid' style='display:none'><%itemid%></span>看起来像<span id='itemid' style='display:none'><%itemid%></span>并在javascript函数SelectSurveyItem中选择参数跨越' innerHTML

链接地址: http://www.djcxy.com/p/70215.html

上一篇: How do I escape a string inside JavaScript code inside an onClick handler?

下一篇: Unicode characters in URLs