問題發現: 過去好好的,今天突然網頁出現了問題。 在獵豹和IE都出現問題,在360瀏覽器就正常。 經過排錯,最終發現: js存儲cookie,php讀取的時候成了亂碼 。 問題分析: 這是因為文字編碼而造成的,漢字是兩個編碼,所以才會搞出這麼個亂碼出來! 解決思路: 1:寫入Cookie時,先將其用 ...
問題發現:
過去好好的,今天突然網頁出現了問題。
在獵豹和IE都出現問題,在360瀏覽器就正常。
經過排錯,最終發現: js存儲cookie,php讀取的時候成了亂碼 。
問題分析:
這是因為文字編碼而造成的,漢字是兩個編碼,所以才會搞出這麼個亂碼出來!
解決思路:
1:寫入Cookie時,先將其用Url編碼,然後再寫入
2:當我們讀取時再Url解碼即可
php兩個函數
urlencode()
urldecode()
js兩個函數
decodeURI()
encodeURI()
5.5以前的版本是 escape unescape
php 設置cookie ,js讀取cookie
<?php setcookie ("TestCookie", urlencode("這就是網頁21")); ?>
<script type="text/javascript"> alert(decodeURI(getCookie("TestCookie"))) function getCookie(sName) { var aCookie = document.cookie.split('; '); for (var i=0; i < aCookie.length; i++) { var aCrumb = aCookie[i].split('='); if (sName == aCrumb[0]) return decodeURI(aCrumb[1]); } return ''; } </script>
js設置cookie php讀取cookie
<script type="text/javascript">function setCookie(name, value, time){ var nameString = name + '=' + encodeURI(value); var expiryString = ""; if(time !== 0) { var expdate = new Date(); if(time == null || isNaN(time)) time = 60*60*1000; expdate.setTime(expdate.getTime() + time); expiryString = ' ;expires = '+ expdate.toGMTString(); } var path = " ;path =/"; document.cookie = nameString + expiryString + path; }setCookie("TestJsCookie", "我是中國人", 0) </script>
<?php echo urldecode($_COOKIE["TestJsCookie"]); ?>
3 js設置js讀取 php設置php讀取方法類似
總結:cookie解決中文亂碼問題實質上是就url編碼函數之間的轉換