首页 新闻 会员 周边 捐助

请求地址中包含中文报错

0
悬赏园豆:20 [已解决问题] 解决于 2017-12-22 14:26

asp.net core 2.0

请求地址中包含中文,例如:http://www.example.com/tag/中文 就会报错:

Invalid non-ASCII or control character in header

因为chrome浏览器默认编码为http://www.example.com/tag/%E4%B8%AD%E6%96%87

那么,在不改变客户端的情况下,如何让服务器接受这些non-ASCII的URL地址呢?

蝌蝌的主页 蝌蝌 | 初学一级 | 园豆:158
提问于:2017-12-22 12:59
< >
分享
最佳答案
0

问题不是服务端无法接受带有non-ASCII字符集的请求,而是转发的时候出问题了。

public IActionResult Tag(string tag)
{
    return Redirect($"https://a.b.com/tag/{tag}/");
}
转发的时候应该把URL参数进行编码:
tag = WebUtility.UrlEncode(tag);
蝌蝌 | 初学一级 |园豆:158 | 2017-12-22 14:26
其他回答(2)
0

你可以处理一下URL,把中文转义后传到后台相对应的的在返转义,有这么个方法你百度一下就能收到,比如 空格 转义为 20%

URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符、汉字、特殊符号等等,所以要对URL进行转换。这个过程就叫做URL编码,或者叫URL转义,实质上就是将包含非ASCII字符的URL转换为有效的ASCII字符格式。

在进行URL编码时,每一个非ASCII字符都被替换为“%hh”格式,其中hh为两位十六进制数,它对应于该字符在ISO-8859-1字符集里的编码值。比如“中国”这两个汉字出现在URL,就要将他们转为“%D6%D0%B9%FA”,由于一个汉字需要两个字节,所以“中国”被替换成了四个ASCII字符。

public static void main(String[] args) throws UnsupportedEncodingException{  
        String s = "zhaoxiaofnag%40eims.com.cn ";  
        s=URLDecoder.decode(s,"utf-8");  
        System.out.println(s);  
          
        String china = "%31%32%36%2E%61%6D/hEeGv4";  
        china = URLDecoder.decode(china,"utf-8");  
        System.out.println(china);  
    } 

 javascript之url转义escape()、encodeURI()和decodeURI()

收获园豆:10
DanBrown | 园豆:1321 (小虾三级) | 2017-12-22 13:23
0

博问中是正常的 https://q.cnblogs.com/tag/%E4%B8%AD%E6%96%87

Invalid non-ASCII or control character in header,是指请求头,不是指请求URL

收获园豆:10
dudu | 园豆:29618 (高人七级) | 2017-12-22 13:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册