已解决ureport在ie8+tomcat8下中文参数传递异常问题

一、问题描述及原因分析
比如说:

*.action?name=张三&sex=男&age=22&grade=14计算机2班&score=90.0
这样就是会报错的,因为url中含有中文, 会报以下错误:
The valid characters are defined in RFC 7230 and RFC 3986
 
将所有的中文换成数字或则英文,则不会显示错误
*.action?name=1&sex=1&age=22&grade=141&score=90.0

(PS:这里我还发现了一个小问题,如果你用IE浏览器输入第一个含中文的链接,他是会将中文显示成乱码,如果你使用谷歌浏览器,则是显示正常,并且能够正常运行并找到该网页,原因是在tomcat7.0.6之后执行了更加严格的标准,chrome会对中文和不安全字符自动进行编码,IE不会。)
 

RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。

RFC3986中指定了以下字符为保留字符:

!    *    '    (    )    ;    :    @    &    =    +    $    ,    /    ?    #    [    ]

        不安全字符

        还有一些字符,当他们直接放在Url中的时候,可能会引起解析程序的歧义。这些字符被视为不安全字符,原因有很多。


    ->空格    Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉

    ->引号以及<>    引号和尖括号通常用于在普通文本中起到分隔Url的作用

    ->#    通常用于表示书签或者锚点

    ->%    百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码

    ->{}|\^`~    某一些网关或者传输代理会篡改这些字符 


 
二、解决方法
1、Url中出现中文和不安全字符的请显示地encode。
2、更改ureport-core.jar中的HtmlPreviewServleAction.java
 
QQ图片20180906172758.jpg
已邀请:
匿名用户

匿名用户

赞同来自:

感谢分享,个人觉得传参的时候encode下就行了,用不着改到源码,

要回复问题请先登录注册