Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在HTML中转义JavaScript代码_Javascript_Html_Escaping - Fatal编程技术网

如何在HTML中转义JavaScript代码

如何在HTML中转义JavaScript代码,javascript,html,escaping,Javascript,Html,Escaping,我的JS代码中有一些addHtmlJavaScript函数。我想知道如何正确地转义HTML/JS代码。基本上,我现在正在尝试的是: addHtml("<a onclick=\"alert(\\\"Hello from JS\\\")\">click me</a>") addHtml(“单击我”) 然而,这是行不通的。它添加了a元素,但当我单击它时,它什么也不做 我不想将所有的“替换为”,作为一种解决办法。(如果我这样做了,它会起作用。)添加HTML(“单击我”) 浏览

我的JS代码中有一些
addHtml
JavaScript函数。我想知道如何正确地转义HTML/JS代码。基本上,我现在正在尝试的是:

addHtml("<a onclick=\"alert(\\\"Hello from JS\\\")\">click me</a>")
addHtml(“单击我”)
然而,这是行不通的。它添加了
a
元素,但当我单击它时,它什么也不做

我不想将所有的
替换为
,作为一种解决办法。(如果我这样做了,它会起作用。)

添加HTML(“单击我”)

浏览器中呈现的最终HTML是什么样子的?我认为这三个斜杠可能会导致问题。

我的解决方案是

addHtml('<a onclick="alert(\'Hello from JS\')">click me</a>') 
addHtml('单击我')
我通常在Javascript字符串中使用单引号,在HTML属性中使用双引号。我认为这是一个很好的遵循规则。

这如何

addHtml("<a onclick=\"alert(&quot;Hello from JS&quot;)\">click me</a>");
addHtml(“单击我”);

无论如何,当我在Firefox中测试时,它起了作用。

问题可能是

正如您现在的代码一样,它将把这个添加到HTML中

<a onclick="alert("Hello from Javascript")"></a>

这是假设转义斜杠将全部正确删除

问题是警报无法处理“内部”警报。。。您必须将这些引号更改为单引号

addHtml("<a onclick=\"alert(\\\'Hello from JS\\\')\">click me</a>")
addHtml(“单击我”)
那应该对你有用

我想知道如何正确地转义HTML/JS代码

要将字符串内容插入HTML事件处理程序属性,请执行以下操作:

(1) 将其编码为JavaScript字符串文字:

alert("Hello \"world\"");
(2) 将完整的JavaScript语句编码为HTML:

<a onclick="alert(&quot;Hello \&quot;world\&quot;&quot;">foo</a>

为什么是3个反斜杠?只需在方法中的每个双引号前加一个反斜杠“\n有人想知道为什么您使用字符串文字向页面添加HTML元素,而不是在dom中创建元素并向其附加事件?@Marko:那么它将不是有效的HTML。@Darko:这只是为了测试,我减少了testcase以将其放在这里。”。即使我以一种绕过问题的方式来解决这个特定任务,我仍然无法解决问题本身,因为我在其他地方需要它。你说它添加了a元素。是否将onclick放在该元素上而不包含任何内容?还是onclick一起丢失了?是的,它不起作用,这就是问题的症结所在。:)我可能想在那里使用更复杂的JS代码片段,我想用一种通用的方式来避免它。仅用
替换所有
可能在所有情况下都不起作用。您将用“”替换所有
,如果JS代码中有任何内容,我将如何替换
?如果我想将完整的
addHtml(…)
再次作为onclick代码,该怎么办?(我需要一个适用于任何代码的通用解决方案。)很可能是因为你做出了一个糟糕的设计决策。我发现,在试图解决这个问题时,在旧版本的FireFox上,你必须小心引用的方式:双内单,还是单内双?前者并不总是有效的!避免处理这个更好。啊,谢谢,所以只要用
替换所有
,它就会一直工作吗?至少到目前为止我测试过的所有案例。并在Webkit中进行了测试。我现在提出了这个最终解决方案(正是这样):没错,它不是一个通用的解决方案,它只是您提供的字符串的解决方案。我认为在将字符串传递给函数之前必须对其进行转义。是的,这就是我的问题所在。:)我该如何摆脱束缚回答得很好bobince。我基本上想出了我的答案
addHtml(“点击我”)通过反复试验,但这清楚地说明了为什么它会起作用。
<a onclick="alert(&quot;Hello \&quot;world\&quot;&quot;">foo</a>
html= "<a onclick=\"alert(&quot;Hello \\&quot;world\\&quot;&quot;\">foo<\/a>";
var a= document.createElement('a');
a.onclick= function() {
    alert('Hello from normal JS with no extra escaping!');
};