就是将变量转换成html,比如你的变量中有一个单引号('),加上escape:url之后单引号会变成
&#039escape:url可以将变量中的& " ' < >转换为字符实体。
在jemter跑数据的时候发现有 "/","+","="的参数都进行了转义,导致无法进行测试。
现解决办法如下:
1.使用函数 __escapeHtml,函数__escapeHtml用于转义字符串中的字符(使用HTML实体)。支持HTML 4.0实体。
2.把参数放到函数里面,使用方法:
${__escapeHtml(在小括号里面输入自己的参数)}。
在数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原在显示的时候对非法字符进行转义
如果项目还处在起步阶段,建议使用第二种,直接使用jstl的<c:out>标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个方法,在解析从服务器端获取的数据时执行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, ‘&’).replace(/>/g, ‘>’).replace(/</g, ‘<’).replace(/”/g, ‘"’)}
如果项目已经开发完成了,又不想大批量改动页面的话,可以采用第一种方法,此时需要借助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML
private boolean escapeJavaScript
private boolean escapeSQL
public StringEscapeEditor() { super()}
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super()this.escapeHTML = escapeHTML
this.escapeJavaScript = escapeJavaScript
this.escapeSQL = escapeSQL}@Overridepublic void setAsText(String text) {
if (text == null) {
setValue(null)} else {String value = text
if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value)}
if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value)}
if (escapeSQL) { value = StringEscapeUtils.escapeSql(value)} setValue(value)}}@Overridepublic String getAsText() { Object value = getValue()return value != null ? value.toString() : “”}}
在上面我们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够自动转移特殊字符。
下面我们在@Controller中注册@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder) {
这个方法可以直接放到abstract Controller类中,这样子每个Controller实例都能够拥有该方法。