gpt4 book ai didi

jsp - 如何使用 JSTL 转义 HTML 标签

转载 作者:行者123 更新时间:2023-12-01 22:26:09 24 4
gpt4 key购买 nike

我必须使用 JSTL 在页面中显示一些已经转义的 HTML 标签的内容。

我知道 excapeXml用于转义可解释为标记的字符。但似乎它只适用于普通和未转义的 HTML:<p>This is the news</p> , 对于已经转义的 HTML 不能正常工作:&lt;p&gt;This is the news&lt;/p&gt; .

那么,我怎样才能使用 JSTL 对已经转义的 HTML 进行反转义呢?

最佳答案

JSTL 不提供专门用于非转义 HTML(或 XML)的标签或函数。您最接近的赌注是 fn:replace()如下所示,假设有问题的未转义 HTML 内容是通过 ${bean.content} 提供的.

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
${fn:replace(fn:replace(bean.content, '&lt;','<'), '&gt;','>')}

它只会变得丑陋和乏味,如果你有更多的字符需要被转义,而不是只有 <> .

您最安全的选择是引入一个自定义 EL 函数,该函数又会调用 Apache Commons Lang StringEscapeUtils#unescapeXml() 或者也许 unescapeHtml4() 方法。如果还没有完成,download并放下 commons-lang.jar/WEB-INF/lib .然后创建一个 /WEB-INF/functions.tld文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">

<display-name>Custom Functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>f</short-name>
<uri>http://example.com/functions</uri>

<function>
<name>unescapeXml</name>
<function-class>org.apache.commons.lang3.StringEscapeUtils</function-class>
<function-signature>java.lang.String unescapeXml(java.lang.String)</function-signature>
</function>
</taglib>

最后只需按如下方式使用它:

<%@taglib prefix="f" uri="http://example.com/functions" %>
...
${f:escapeXml(bean.content)}

与具体问题无关,我个人会退后一步。为什么您首先要转义 HTML?这很奇怪。通常,转义应该仅在 HTML 呈现期间发生。我宁愿查找负责转义该 HTML 的人,然后将其更改为不再不必要地转义 HTML。也许对此负责的人并没有真正理解网页中 HTML 转义的概念,而是在请求处理期间手动执行转义,作为一种不慎重的 XSS 预防尝试的一部分。这是阅读的食物:XSS prevention in JSP/Servlet web application .

关于jsp - 如何使用 JSTL 转义 HTML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com