我需要在显示网页上的内容之前转义一些文本,这实际上是正确完成的。但是,当我在html中显示String时,仍将显示转义字符。以下是这样一个例子:
hello there my ni&%ame is + - && !
以及带有转义的相应字符串如下:
hello there my ni&%ame is + - && !
我已经读过某个地方,taglib中的核心只会逃避基本的,例如>,< ,“,\ t和空格。但是这些转义序列都没有从html代码中删除。你们中的任何人都知道如何解决这个问题吗?谢谢
以下是用于将特定字符转换为其转义字符的代码的一部分:
while (character != CharacterIterator.DONE ){
if (character == '<') {
result.append("<");
}
else if (character == '>') {
result.append(">");
}
else if (character == '&') {
result.append("&");
} .....
return result;
}
转义部分完成并完美运行..当我尝试将带有转义字符的字符串显示到html页面时出现问题
答案 0 :(得分:3)
if (character == '<') {
result.append("<");
}
else if (character == '>') {
result.append(">");
// ...
删除它。你不需要它。 JSTL <c:out>
已经完成了这项工作。
<c:out value="${someBean.someProperty}" />
您的HTML字符串会被转义两次。每个&
再次成为&
,依此类推。
如果你真的需要自己动手逃跑(为什么?)那么就根本不要使用<c:out>
:
${someBean.someProperty}
或通过escapeXml="false"
关闭其转义:
<c:out value="${someBean.someProperty}" escapeXml="false" />
答案 1 :(得分:1)
BalusC已经钉了它。
还有几点:
如果您遇到的网页问题不正确,您应该做的一件事就是使用网络浏览器的“查看源”功能查看原始HTML。在这种情况下,它会显示双重逃逸,并更快地实现问题所在。
在HTML中,您只应需要才能转义<
,>
和&
。如果您的HTML以UTF-8编码(其内容类型也是如此),其他字符应该可以正常工作。