URL特殊字符编码还原问题:get_query_var获取路径的ä解码失败
解决URL编码字符的解码问题
嘿,我来帮你搞定这个编码问题!你遇到的%C3%A4其实是UTF-8字符的URL百分号编码,而utf8_decode()根本不是用来处理这种编码的,这就是为什么你用它没效果的原因。
为什么utf8_decode()没用?
utf8_decode()的作用是把UTF-8编码的字符串转换成ISO-8859-1(Latin-1)编码,而你当前拿到的%C3%A4是URL编码后的结果,不是直接的UTF-8字符串。用它处理反而会把解码后的UTF-8字符转成错误的Latin-1字符,导致乱码。
正确的解码方法
你需要用专门处理URL百分号编码的函数:urldecode()或者rawurldecode(),两者的区别仅在于对加号+的处理(urldecode会把加号转成空格,rawurldecode不会),你的场景里用哪个都可以。
示例代码:
$url = get_query_var('title2'); // 解码URL编码的字符串 $decoded_url = urldecode($url); var_dump($decoded_url); // 输出结果:string(27) "500-Beställning"
如果用rawurldecode(),效果是一样的:
$decoded_url = rawurldecode($url);
这样就能正确得到包含ä的原始字符串啦!
内容的提问来源于stack exchange,提问作者mrfr
相关产品推荐
相关产品推荐

