JSTL转义特殊字符[重复]

Posted

技术标签:

【中文标题】JSTL转义特殊字符[重复]【英文标题】:JSTL escaping special characters [duplicate] 【发布时间】:2011-09-02 07:51:44 【问题描述】:

我对特殊字符有这个奇怪的问题。 在 JSP 中,我使用字段名称作为 id,名称可以是任何类似

id="<1 and &>2" (OR)
id="aaa & bbb"

除了名称之外,我没有任何其他选项可以使用 ID,这是我从后端获得的唯一信息。

那么,是否有任何逻辑可以使用 JSTL 删除所有特殊字符。 在目前的场景下,我会在 JS 中对 ID 进行一些操作。这会导致各种浏览器出现许多问题。

请建议,提前谢谢...

【问题讨论】:

【参考方案1】:

I think this is what you are lokking for

使用 Spring 的 htmlUtils.htmlEscape(字符串输入)。

【讨论】:

感谢链接,但这不是我的要求,我只需要在前端进行特殊字符处理。只需要处理ID 虽然这可行,但这不是正确的方法。在 web 应用程序中,转义应该在视图端完成,而不是在业务端。 JSP 是使用 Java 代码错误的观点。使用 JSP taglibs/EL 函数。 @BalusC 我攻击,相同的代码可以移动到标记并使用它。 JSTL <c:out>fn:escapeXml() 已经这样做了。不需要其他库。 @BalusC 对不起,我不知道 JSTL 功能。我也会推荐 $fn:escapeXml。谢谢。【参考方案2】:

JSTL 提供了两种转义 HTML 特殊字符的方法:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
[…]
<c:out value="$myName"/> 

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
[…]
$fn:escapeXml(myName)

两者都会将特殊字符转换为各自的 HTML 实体:(&amp;lt; 变为 &amp;lt;&amp;amp; 变为 &amp;amp;...)。

请注意,ID 必须以 HTML 编码,而不是 javascript

【讨论】:

我不需要使用 escapeXml,因为我已经得到了像 < 这样的数据。而不是 那又怎样? <包含一个 HTML 特殊字符:&。如果 嘿抱歉,这不是关于显示,而是关于将值放在示例 div id 中。我无法在 js 中引用此 ID 它没有显示的事实并没有改变任何东西。如果ID必须为<,则必须写为&lt;在 HTML 源代码中。使用 document.getElementById("<") 应该返回您的 div。有关示例,请参见 jsfiddle.net/JQrWu。 Hello 请试试这个【参考方案3】:

我认为您的问题被误解了。 我与您到达了同一点,并使用 excapeXml="false" 解决了问题。

<c:out value="$id" escapeXml="false"/> 

我在数据库中有如下数据:

<你好世界>

escapeXml="false" 让它显示

<Hello World>

【讨论】:

在数据库中将字符串转义为 HTML 不是一个好主意。【参考方案4】:

我刚刚遇到了一种情况,我必须逃避 ' 即单引号与其他特殊字符分开。在这种情况下 fn:escapeXml 失败。所以我使用了 Spring API 的 JavaScriptUtils.javaScriptEscape(),创建了一个标签并应用。现在问题解决了。我还提到了网址:http://www.coderanch.com/t/528521/JSP/java/Passing-JSTL-variable-special-characters。

【讨论】:

以上是关于JSTL转义特殊字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

阻碍 Python 将 JSON 数据转换为转义的特殊字符时出现 Python UnicodeDecodeError [重复]

SpringBoot Yaml 配置 特殊字符转义

C++特殊字符转义序列

iOS:转义网址链接中的特殊字符问题

JS post表单特殊字符转义问题

js,如何防止特殊字符被转义