我在传递参数时遇到问题,我认为我应该能够优雅地解决该问题(用 1 行代码),但我似乎无法解决该问题。我有一个删除项目的链接,如下所示:
<a href="javascript:confirmDelete('${result.headline}',${result.id});">
当 result.headline 包含 ' 或 "或其他破坏 javascript 调用的字符时,就会出现问题。我已经尝试过 ${fn:replace(result.headline,"'","")}
,它修复了 ' 的问题,但是我想做某种 URLEncode (我认为),这样这些字符不会破坏 javascript 调用。有关如何在不更改后端任何内容的情况下解决此问题的任何想法吗?
最佳答案
避免将内联 JavaScript 放入元素中,尤其是 javascript:
伪 URL,这些伪 URL(除了永远不应该使用的邪恶之外)是 JavaScript-in-URL-in-HTML。您必须获取标题并:
- JavaScript 字符串文字对其进行编码。 (替换
\
、'
、控制字符和潜在的 Unicode 字符,或者仅使用 JSON 编码器来为您完成此操作。)然后, - 对其进行 URL 编码。那么,
- 对其进行 HTML 编码。
最好将数据放在标记中,这样您只需担心简单的 HTML 编码,就像在其他地方所做的那样,以避免跨站点脚本:
<a href="#" class="confirmdelete-${fn:escapeXml(result.id)}" title="${fn:escapeXml(result.headline)}">Delete</a>
并让 JavaScript 提取它们:
<script type="text/javascript">
for (var i= document.links.length; i-->0;) {
var link= document.links[i];
if (link.className.indexOf('confirmdelete-')===0) {
link.onclick= function() {
confirmDelete(this.title, this.className.substring(14));
return false;
};
}
}
</script>
(使用实用函数或框架编写上述内容可能有更简单、更短或更清晰的方法,并且对于链接是否确实是此类操作的正确标记存在争议,但这是基本思想.)
关于javascript - 将错误的字符串作为 javascript 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986953/