我正在从数据库中输出值(它不是真正对公共条目开放,但它可以由公司的用户输入 - 这意味着,我不担心XSS.)
我正在尝试输出这样的标签:
Click Me
DESCRIPTION实际上是数据库中的值,如下所示:
Prelim Assess "Mini" Report
我已经尝试用"替换"代替,但无论我尝试什么,Firefox都会在" 评估 "一词之后的空格之后切断我的JavaScript调用,这会导致各种各样的问题.
我必须得到明显的答案,但对于我的生活,我无法理解.
有人想指出我的愚蠢吗?
这是整个HTML页面(最终它将是一个ASP.NET页面,但为了解决这个问题,我除了问题代码之外还拿出了其他所有内容)
edit
Aaron.. 203
您需要转义要写入的字符串DoEdit
以清除双引号字符.它们导致onclick
HTML属性过早关闭.
\
在HTML上下文中使用JavaScript转义字符是不够的.您需要使用正确的XML实体表示替换双引号"
.
您需要转义要写入的字符串DoEdit
以清除双引号字符.它们导致onclick
HTML属性过早关闭.
\
在HTML上下文中使用JavaScript转义字符是不够的.您需要使用正确的XML实体表示替换双引号"
.
"
因为HTML上下文,我会在这个特殊情况下工作,正如我之前所建议的那样.
但是,如果你希望你的JavaScript代码能够独立逃过任何情况下,你可以选择本地JavaScript编码:
'
变\x27
"
变\x22
所以你的onclick会变成:DoEdit('Preliminary Assessment \x22Mini\x22');
例如,当将JavaScript字符串作为参数传递给另一个JavaScript方法(这alert()
是一个简单的测试方法)时,这也会起作用.
我指的是重复的Stack Overflow问题,如何在onClick处理程序中转义JavaScript代码中的字符串?.
edit
应该做的伎俩.
伙计们,已经有了unescape
JavaScript中的功能,可以解决这个问题\"
:
问题是HTML无法识别转义字符.您可以通过使用HTML属性的单引号和onclick的双引号来解决这个问题.
edit
我基本上就是这样做的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\"