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>
UTF-8頁面引用外部編碼為GBK的JS文件編碼的處理
比如對於QQ的IP返回城市的接口的js我們使用下面的代碼,可是在UTF-8頁面中正常的顯示GBK編碼的js
代碼如下
<script type=”text/javascript” src=”http://fw.qq.com/ipaddres” charset=”gb2312″></script>
這樣子我就成功的解決了在UTF-8頁面中引入編碼為GBK的JavaScript文件亂碼問題了。而且不需要額外的寫函數處理GBK轉UTF-8編碼,同樣對於GBK頁面引用編碼為UTF-8編碼的JavaScript文件如果出現亂碼問題,可以使用下面的代碼來解決
代碼如下
<script type=”text/javascript” src=”test.js” charset=”utf-8″></script>
此方法是對於在js文件中出現漢字中文,以及其他容易造成在GBK與UTF-8編碼錯誤字符的時候使用,對於純英文的就不需要了。如果為了保險,加上也無妨~