这个方法不是我想出来的,是网上一位博主的idea,得益于这个想法,困扰我已久的js UTF-8传参到GBK页面问题也得以解决。我把思路和大家分享下,希望能帮到有需要的朋友。

js UTF-8传中文参数到GBK,之所以不行是因为其字符长度不同,1个中文在UTF-8中为3个字符,而GBK为2个字符,所以导致encodeURL后不同编码内容不一致。

要转换编码,怎么都离不开服务器,所以最佳办法是做一个中转页面,你可以提示“正在跳转到xxx”,但是这个页面的实质是处理中文参数问题,通过js,用URl传参到中转页面,中转页面再通过$_GET来判断是否有参数,有则用iconv转换编码,然后再组合转换好的URL参数,跳转到GBK页面。

下面是作者的一个简单的中转页,供不懂的同学参考

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
</head>
<body>
<h1>正在跳转到相应服务器........</h1>

<?php
$url = array(
    'tmall' => 'http://s8.taobao.com/search?commend=all&style=grid&pid=mm_11039324_2536738_9491366&mode=66&viewIndex=10&user_type=1&q=',
    '360buy'=> 'http://search.360buy.com/Search?utm_source=show.union.360buy.com&utm_medium=tuiguang&utm_campaign=t_19195_&keyword=',
);
if( $_GET['url'] == '' && $_GET['q'] == '' )
    echo '<script>alert("参数有误,点确定后将自动跳转回首页");window.location.href="http://',$_SERVER['HTTP_HOST'],'"</script>';
else
{
    echo '<script>window.location.href="',$url[$_GET['url']],iconv('UTF-8','GBK',$_GET['q']),'"</script>';
}

?>

</body>
</html>