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 实体:(&lt;
变为 &lt;
,&amp;
变为 &amp;
...)。
请注意,ID 必须以 HTML 编码,而不是 javascript。
【讨论】:
我不需要使用 escapeXml,因为我已经得到了像 < 这样的数据。而不是 那又怎样? <包含一个 HTML 特殊字符:&。如果 嘿抱歉,这不是关于显示,而是关于将值放在示例 div id 中。我无法在 js 中引用此 ID 它没有显示的事实并没有改变任何东西。如果ID必须为<,则必须写为<在 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 [重复]