javascript - 没有非法字符。没有单引号。没有双引号。但还是需要逃避

标签 javascript html

我想所有这些都会起作用。 但只有4个有效。其他的会产生“missing )”错误。

我运行过的所有“代码检查器”都声称“完全没有错误”。所有字符串文字都不包含任何单引号或双引号。

转义所有文本以避免所有错误的 secret 方法是什么。

 <div onclick='alert("Bob&apos;s"          );'> 1 works </div>
 <div onclick="alert('Fred&apos;s'         );"> 2 fails </div>
 <div onclick='alert("Say &quot; hi &quot;");'> 3 fails </div>
 <div onclick="alert('Say &quot; hi &quot;');"> 4 works </div>
 <div onclick='alert("Bob&#39;s"           );'> 5 works </div>
 <div onclick="alert('Bob&#39;s'           );"> 6 fails </div>
 <div onclick='alert("Say &#34; hi &#34;"  );'> 7 fails </div>
 <div onclick="alert('Say &#34; hi &#34;'  );"> 8 works </div>

最佳答案

在将字符串传递给 Javascript 之前,HTML 实体会被转换为其相应的字符。它们仅在 HTML 级别转义字符,而不是在 Javascript 级别转义。

所以第二个尝试执行 Javascript:

alert('Fred's');

其中包含不正确的嵌套引号。您需要包含 Javascript 转义序列来保护引用:

<div onclick="alert('Fred\&apos;s'         );">

这将执行 Javascript:

alert('Fred\'s');

这是有效的。

如果您正在寻找一种通用方法来生成始终可以正确转义的代码,而无需详细解析它,我认为没有。最好的解决方案不是首先将 Javascript 放入 HTML 属性中,而是使用不显眼的 Javascript。

<div id="fredalert">

<script>
document.querySelector("#fredalert").addEventListener("click", function() {
    alert('Fred\'s');
});
</script>

关于javascript - 没有非法字符。没有单引号。没有双引号。但还是需要逃避,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51778025/

相关文章:

javascript - Chrome本地存储的正确使用方法获取

javascript - 使用 jquery 获取 json 数据的唯一值

javascript - 相对于元素当前颜色(色调、饱和度、亮度)的 jQuery 颜色动画

javascript - 在 Bootstrap 模式关闭事件上重置表单

javascript - 检测div的位置

php - 单击提交时验证文本区域

html - 是不是AppCache = Application Cache = Web Storage的LocalStorage?

javascript - 通过RequestDispatcher调用html页面获取请求参数

css - Stackin DIV(可能是纯 CSS)固定高度和非固定高度

jQuery - 添加元素并影响不同元素的 HTML