我必须显示一些内容与已经逃脱的HTML标记在页面与JSTL。 我知道excapeXml是用于转义可以被解释为标记的字符的。但似乎它只对普通和未转义的HTML:<p>This is the news</p>起作用,它对已经转义的HTML:<p>This is the news</p>不起作用。 那么,如何用JSTL来恢复已经转义的HTML呢?
<%@taglib uri="http://javatips.info/simple-tag" prefix="spl"%>
<spl:splWithBody color="red" headerColor="cyan"><p>This is the news</p></spl:splWithBody>
3条答案
按热度按时间pdtvr36n1#
JSTL不提供专门针对非转义HTML(也不提供XML)的标记或函数。您最接近的选择是
fn:replace()
,如下所示,假设所讨论的非转义HTML内容是通过${bean.content}
提供的。字符串
如果你有更多的字符需要解转义,而不仅仅是
<
和>
,它只会变得丑陋和乏味。最安全的方法是引入一个自定义EL函数,该函数依次调用Apache Commons Lang
StringEscapeUtils#unescapeXml()
或unescapeHtml4()
方法。如果还没有完成,请将download和commons-lang.jar
放入/WEB-INF/lib
中。然后创建一个/WEB-INF/functions.tld
文件,如下所示:型
最后,就像下面这样使用它:
型
无关具体的问题,我个人会退后一步。你到底为什么要逃避HTML摆在首位?很奇怪。通常,转义应该发生在HTML中-我宁愿查找负责转义HTML的人,然后更改它,使其不再不必要地转义HTML。也许负责的人并没有真正理解网页中HTML转义的概念,以及在请求处理过程中手动执行转义,这是一个轻率的XSS预防尝试的一部分。
mklgxw1f2#
为什么不考虑使用JSP自定义标记呢?通过使用自定义标记,您可以对标记进行更多的控制。
http://javatips.info/jsp-custom-tag.html
对于您的情况,您可以在文章中找到示例2或4。
把你的内容作为你的jsp中标记的主体:
字符串
浏览器输出:
SimpleTagSupport:with body ->这是新闻
mzillmmw3#
使用下面的代码:
字符串