ecshop 中 escape:url,escape:html 什么意思,如何应用

html-css027

ecshop 中 escape:url,escape:html 什么意思,如何应用,第1张

就是将变量转换成html,比如你的变量中有一个单引号('),加上escape:url之后单引号会变成

&#039

escape: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实例都能够拥有该方法。