java escape html_慎用StringEscapeUtils.escapeHtml方法【转】「建议收藏」

java escape html_慎用StringEscapeUtils.escapeHtml方法【转】「建议收藏」推荐使用Apachecommons-lang的StringUtils来增强Java字符串处理功能,也一直在项目中大量使用StringUtils和StringEscapeUtils这两个实用类。最近在数据库里发现某个表的内容全都成了HTMLentity表示,中文也全被转换成了”我”这样的格式,而在页面上显示一切正常。最终发现造成这个后果的原因是在将字符串保存到数据库之前,用StringEsca…

大家好,欢迎来到IT知识分享网。

推荐使用Apache commons-lang的StringUtils来增强Java字符串处理功能,也一直在项目中大量使用StringUtils和StringEscapeUtils这两个实用类。

最近在数据库里发现某个表的内容全都成了HTML entity表示,中文也全被转换成了”我”这样的格式,而在页面上显示一切正常。最终发现造成这个后果的原因是在将字符串保存到 数据库之前,用StringEscapeUtils.escapeHtml对其进行了处理。

字符串过滤是在许多Web应用开发中需要考虑的问题。比如用户输入一个左尖括号(

而某些内容是不会被编辑的,比如一般的电子邮件,这类就可以在用户提交表单之时转换,一劳永逸。于是我使用了StringEscapeUtils.escapeHtml来做这个工作。

如果是英文内容,没有任何问题,然而它将一个中文字符转换成了8个字符。在UTF-8的编码 中,每个汉字占用三个字节,每个英文字符占用一个字节。这样的转换造成了大量的空间浪费。

简单的办法是自己写一个escapeHtml方法,替换左右尖括号就可以了。虽然还有一些HTML entity未被转换,可能造成输出的网页不符合web标准,但是大部分浏览器都可以正常显示也就够了。

对要输出的网页内容编码,网上搜的方法。

public static String htmlEncode(String source) {

if (source == null) {

return “”;

}

String html = “”;

StringBuffer buffer = new StringBuffer();

for (int i = 0; i < source.length(); i++) {

char c = source.charAt(i);

switch (c) {

case ‘

buffer.append(“

break;

case ‘>’:

buffer.append(“>”);

break;

case ‘&’:

buffer.append(“&”);

break;

case ‘”‘:

buffer.append(“””);

break;

case 10:

case 13:

break;

default:

buffer.append(c);

}

}

html = buffer.toString();

return html;

}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/26327.html

(0)
上一篇 2023-05-11 10:00
下一篇 2023-05-12 10:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信