javascript - 将错误的字符串作为 javascript 参数传递

标签 javascript jstl

我在传递参数时遇到问题,我认为我应该能够优雅地解决该问题(用 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。您必须获取标题并:

  1. JavaScript 字符串文字对其进行编码。 (替换 \'、控制字符和潜在的 Unicode 字符,或者仅使用 JSON 编码器来为您完成此操作。)然后,
  2. 对其进行 URL 编码。那么,
  3. 对其进行 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/

相关文章:

javascript - React-native 如何在另一个 javascript 文件中使用状态值

javascript - Google API 多作用域

javascript - jquery - 对任何事件执行效果

javascript - Google Plus One 按钮后端错误 -32099

java - 如何从html输入单选中获取值并将其放入jsp java中的输入隐藏字段中

Spring Boot-绝对 uri : http://java. sun.com/jsp/jSTL/core 无法在 web.xml 或 jar 文件中解析

java - JSTL如何从请求中输出数据

mysql - 如何在 mysql 中更新 BIT 数据类型的字段

javascript - jQuery 变量中的转义字符不起作用

java - spring mvc使用model.addAttribute(nav)无法在jsp中用${nav.id}获取父类的属性