jfinal重定向时,url编码后无法正确重定向

做一个短链接服务,因为要重定向但是为了兼容url中包含中文,重定向后会产生乱码,所以重定向前将url进行encode编码,但是jfinal检测到包含了“.”就无法正确重定向

评论区

jounzhang

2019-04-03 16:02

JFinal

2019-04-03 16:10

字符 . 与重定向无关

jounzhang

2019-04-04 09:30

@JFinal
ActionHandler里面:
if (target.indexOf('.') != -1) {
return ;
}

RedirectRender类里面:

// 如果一个url为/login/connect?goto=http://www.jfinal.com,则有错误
// ^((https|http|ftp|rtsp|mms)?://)$ ==> indexOf 取值为 (3, 5)
if (contextPath != null && (url.indexOf("://") == -1 || url.indexOf("://") > 5)) {
result = contextPath + url;
} else {
result = url;
}

其他的没仔细看,结果就是这样:
原始url
https://www.baidu.com/s?wd=今天晚上吃什么
url encode
https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%E4%BB%8A%E5%A4%A9%E6%99%9A%E4%B8%8A%E5%90%83%E4%BB%80%E4%B9%88

然后调用redirect(url)重定向无法成功,会自动在前面加上contextPath,变成
http://localhost/https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%E4%BB%8A%E5%A4%A9%E6%99%9A%E4%B8%8A%E5%90%83%E4%BB%80%E4%B9%88

但是直接redirect("https://www.baidu.com/s?wd=今天晚上吃什么")的话,会中文乱码

所以现在我只能对部分进行编码了,只编码中文和特殊符号

热门反馈

扫码入社