finereport报表url中传特殊字符
官方文档( /)
(1)按文档,使用finereport的js库
如果在需要进行cjkEncode的URI的参数中包含特殊字符,比如%,#,$,=,&,/,?,+,@等字符时,需要在cjkEncode之后,再次调用javascript的encodeURIComponent对这些特殊字符进行编码。如参数值是”%华%“这样的字符,就需要写成encodeURIComponent(("%华%")),一定要先进行cjkEncode,然后再进行encodeURIComponent,完整代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource="></script>
<Script Language="JavaScript">
function frOpen() {
window.location=FR.cjkEncode("http://localhost:8075/WebReport/ReportServer?reportlet=doc/Primary/Parameter/&地区=") +encodeURIComponent(FR.cjkEncode("%华%"));
}
</Script>
</head>
<body>
<input type="button" value="字符转换1" onclick="frOpen()">
</body>
</html>
(2)实际在传参到数据库的时候+不能如上传入finereport
解决方法:
手动先将+转义为%2B,再使用finereport官方文档给出的方法即可。
如传入的参数为d+1,即使用encodeURIComponent((“d%2B1”))方法进行转换后,再进入url传参finereport就可以解析到d+1了。
2.我在项目中出现,UI组件datepicker无法使用,原因可能是引入了两个不同版本的js或者引用了两次相同版本的js,这里直接使用官方文档给出的方法
function cjkEncode(text) {
if (text == null) {
return "";
}
var newText = "";
for (var i = 0; i < text.length; i++) {
var code = text.charCodeAt (i);
if (code >= 128 || code == 91 || code == 93) {//91 is "[", 93 is "]".
newText += "[" + code.toString(16) + "]";
} else {
newText += text.charAt(i);
}
}
return newText;
}
调用该方法即可:如d+1:encodeURIComponent(cjkEncode(“d%2B1”))
3.查看帮助文档发现更 简单的方法(/)
在URL中,“+”的编码为%2B,除了跟“%”的编码%25拼接到一起的时候能正常显示外,其它拼接都默认显示为空格,要想正常显示,需将“+”的编码改为%252B才可以。