当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在onClick处理程序中转义JavaScript代码中的字符串?》经验,为你挑选了5个好方法。

也许我只是在考虑这个问题,但是我在查找链接的onClick处理程序中某些JavaScript代码中的字符串转义时遇到了什么问题.例:

Select

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

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

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

正在为搜索结果页面中的每个结果生成此链接,因此无法在JavaScript标记内创建单独的方法,因为我需要为每个结果生成一个.

此外,我正在使用我工作的公司本土化的模板引擎,因此特定于工具包的解决方案对我来说毫无用处.



1> Duncan Smart..:

在JavaScript中,您可以将单引号编码为"\ x27",将双引号编码为"\ x22".因此,使用此方法,您可以在JavaScript字符串文字的(双重或单个)引号内使用\ x27\x22而不用担心任何嵌入式引号"突破"您的字符串.

\ xXX用于字符<127,而\ uXXXX用于Unicode,因此您可以使用这些知识为所有超出常规白名单的字符创建强大的JSEncode函数.

例如,

Select


您保存了我的实际以及以后的一些日子

2> Vitalii Fedo..:

根据服务器端语言,您可以使用以下方法之一:

.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) %>



3> Shyam..:

使用隐藏的跨度,每个参数对应一个,<%itemid%><%itemname%>在其中写入它们的值.

例如,跨度<%itemid%>看起来就像<%itemid%>在javascript函数SelectSurveyItem中一样从这些跨度中选择参数innerHTML.


这真是最好的答案.如果您将值放在中,然后使用jQuery $('#itemid')获取它们.val()不需要特殊治疗.

4> Kent Fredric..:

尽量避免在HTML中使用字符串文字,并使用JavaScript绑定JavaScript事件.

另外,除非你真的知道自己在做什么,否则请避免使用'href =#' .它打破了强制性middleclickers(开瓶器)的可用性.

Select

我选择的JavaScript库恰好是jQuery:


如果你碰巧正在渲染这样的链接列表,你可能想要这样做:

Bar
Baz




5> Dan..:

如果它进入一个HTML属性,你就需要在两个HTML编码(至少包括:>> <<"")它,逃脱单引号(用反斜杠),所以它们不会与你的JavaScript引用干扰.

最好的方法是使用你的模板系统(必要时扩展它),但你可以简单地制作几个转义/编码函数,并将它们包装在那里的任何数据周围.

是的,它完全有效(正确,甚至)HTML转义HTML属性的全部内容,即使它们包含javascript.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有