ognl.ExpressionSyntaxException: Malformed OGNL expression: nbsp;的解决

来源:互联网 发布:手机数据是什么 编辑:程序博客网 时间:2024/04/30 15:01

我的问题场景是这样的:

我用js获取页面html内容,如果html内容中一个地方仅含有一个空格,即 的时候,就不会有什么问题,一旦含有两个及以上连续空格的时候(  )

 struts2获取参数碰到& 后面内容就没了。

 

会报错误如下:

警告: Error setting value
ognl.ExpressionSyntaxException: Malformed OGNL expression: nbsp; [ognl.TokenMgrError: Lexical error at line 1, column 6.  Encountered: <EOF> after : ""]
 at ognl.Ognl.parseExpression(Ognl.java:119)
 at com.opensymphony.xwork2.ognl.OgnlUtil.compile(OgnlUtil.java:207)
 at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:192)
 at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:155)
 at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:143)
..........................

 

问题肯定出在页面处理方法对“&”的支持上,我之前做的处理是encodeURI(contentString);结果就出了以上的问题了,

后来我的解决方式是将encodeURI换成encodeURIComponent,问题就解决了!

JS 自带的 escape() 、 encodeURI() 、 encodeURIComponent()这三个函数都可以用来对URI进行encode或过滤特殊字符(#/$&+=?/等)

我以前一般是习惯用encodeURI() ,不过最好用encodeURIComponent()(需要IE 5.5以上,FireFox当然没问题),因为对UTF-8支持比较好,

不会遇到中文乱码问题,否则还需要进行编码转换,很麻烦的。使用其它两个函数都会发生丢失特殊字符的问题,例如空格变+号或者空格,引号,&=?等

丢失的问题, 至少使用 JSP 作为服务器端的话会发生这种情况, 有兴趣的朋友可以将本文最后的例子代码中的编码部分修改后做个测试.

 

其实,这个问题,个人觉得还可以通过在页面上使用Base64加密然后再解密解决(不过这样麻烦,也没有试过!)

原创粉丝点击