解決ThinkPHP中以Get模式提交中文字元亂碼

來源:互聯網
上載者:User
解決ThinkPHP中以Get方式提交中文字元亂碼

?

接觸thinkPHP還沒幾天,都還沒入門呢,因為公司項目非常著急,自己也對thinkPHP很有興趣想藉機會提高一下,就著急的用thinkPHP開始了,當然是遇到了非常多的問題,不過還好通過朋友gidot的協助及網路還有官方的手冊,基本都解決了。

這幾天又遇到個問題,就是GET提交中文會亂碼的問題。在論壇看了下好像很多人都有而且也沒個好的解決辦法。
資料庫、頁面編碼、檔案保編碼這些全都是UTF8是100%確定沒有問題的。
有的人提供的說可行的方法,到我這裡也不行,可能是因為我環境是WIDNOWS2003+IIS6.0的預設字元集為中文有關係。試遍了各種方法始終不行。

後來看說用戶端base64編碼了再發送請求,然後伺服器上再BASE64解碼。試了下,發現PHP的base64結果居然和JS的不一樣-_-|||,後來想,問題是出在傳遞時的編碼上,用base64也只是把字元轉換成字母以避免被再次編碼解碼出現問題。
既然如此,那自己寫個簡單的編解碼應該也能解決,試了下,果然解決了,現在分享一下我的方法。

先給用戶端發送出的資料,編碼一下,免得傳遞時被瀏覽器編碼了到伺服器出問題,我的解決辦法是,發送表單時,先用JS給字元encodeURI編碼了,然後將裡面的百分比符號“%”替換成別的不會被編碼的字元(注意這個字元要比較特別,不要和使用者輸入的字元混淆,也不能過長,考慮到一個字元容易和使用者輸入混淆,我選了3個字元“.s.”,),再讓表單發送。具體實現:

程式碼



然後在伺服器端寫個函數,把我們編碼的資料解碼成正常的:
程式碼


//解碼GET傳值
function getChineseGetValue($key){
if (strlen($key)>0){
??return?urldecode(str_replace('.s.','%',$key));
}
}



然後我們接收參數查詢時要解碼:
程式碼

$map['group_name'] = array('like',"%".getChineseGetValue($_GET['group_name'])."%");



最後在頁面顯示GET值的時候,也要解碼:
程式碼





這樣就可以了,希望本帖對有此問題的童鞋能有所協助,
附帶說明下,那個 getId 是我的一個JS函數,偷懶用的(可以不用那麼麻煩的老寫document.getElementById……),代碼如下:
程式碼

function getId(id){
return document.getElementById(id);
}

?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.