在我的jsp表单中,当我输入这些特殊字符时,
!"#$%&*+/:;=?@[]^{|}~\
它在屏幕上显示的内容与上面相同,但不是 "和 & ,而是将 html 实体显示为 "
和 &
这对这两个有好处字符。但我想显示所有其他特殊字符,如下所示
!"#$%&*+ /
在屏幕后面,它对所有字符进行编码,但是当我在屏幕上显示时,只有两个字符被编码,所有其他字符都被再次解码并显示在屏幕上!
如何更改它以仅显示编码值而不解码?
对于每个请求,我使用 EscapeCharactersUtility 类转换表单字段值,例如
while (character != CharacterIterator.DONE ){
if (character == '<') {
result.append("<");
}
else if (character == '>') {
result.append(">");
}
else if (character == '&') {
result.append("&");
}
else if (character == '\"') {
result.append(""");
}
else if (character == '\t') {
addCharEntity(9, result);
}
else if (character == '!') {
addCharEntity(33, result);
}
}
addCharEntity 用于追加和
;
我在下面的类中的 processFormFieldValue 方法中进行转换,
public class CSRFRequestDataValueProcessor implements RequestDataValueProcessor {
@Override
public String processAction(HttpServletRequest request, String action) {
return action;
}
@Override
public String processFormFieldValue(HttpServletRequest request, String name, String value, String type) {
value = EscapeCharactersUtility.forHTML(value);
return value;
}
@Override
public Map<String, String> getExtraHiddenFields(HttpServletRequest request) {
Map<String, String> hiddenFields = new HashMap<String, String>();
hiddenFields.put(CSRFTokenManager.CSRF_TOKEN_NAME, CSRFTokenManager.getTokenForSession(request.getSession()));
return hiddenFields;
}
@Override
public String processUrl(HttpServletRequest request, String url) {
return url;
}
}
最佳答案
当您对字符进行编码时,浏览器将对其进行解码并在屏幕上显示该字符。这很正常。如果你想在浏览器中直接显示代码而不是字符,你需要这样做
< becomes &lt;
" becomes &quot;
结果将是在屏幕上看到的不是小于号和引号
<
"
所以
if (character == '<') {
result.append("&lt;");
}
else if (character == '&') {
result.append("&amp;");
}
关于java - 输出编码(在jsp中显示编码后的字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478782/