JS讀取PHP中設置的中文cookie時出現(xiàn)亂碼的解決方法:1、在PHP中先用escape函數(shù)編碼,到客戶端時利用js中的unescape解碼;2、使用【setrawcookie()】函數(shù)來代替cookie值。
JS讀取PHP中設置的中文cookie時出現(xiàn)亂碼的解決方法:
在PHP中先用escape函數(shù)編碼,到客戶端時利用js中的unescape解碼。
escape函數(shù)如下:
function escape($str) { preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r); $ar = $r[0]; foreach($ar as $k=>$v) { if(ord($v[0]) < 128) $ar[$k] = rawurlencode($v); else $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v)); } return join("",$ar); }
例子:test.php
<?php function escape($str) { preg_match_all("/[x80-xff].|[x01-x7f]+/",$str,$r); $ar = $r[0]; foreach($ar as $k=>$v) { if(ord($v[0]) < 128) $ar[$k] = rawurlencode($v); else $ar[$k] = "%u".bin2hex(iconv("GB2312","UCS-2",$v)); } return join("",$ar); } $name = escape("深圳人"); setcookie("name", $name); ?> <scrīpt> function get_cookie(name) { var result = null; var myCookie = document.cookie + ";"; var searchName = name + "="; var startOfCookie = myCookie.indexOf(searchName); var endOfCookie; if (startOfCookie != -1) { startOfCookie += searchName.length; endOfCookie = myCookie.indexOf(";",startOfCookie); result = unescape(myCookie.substring(startOfCookie, endOfCookie)); } return result; } </scrīpt> <scrīpt> document.write("js:" + unescape(getCookie("name"))); </scrīpt>
另外還有一個方法:
在PHP5中,可以使用setrawcookie()
函數(shù)來代替,它是在設置cookie值的時候沒有編碼的,所以在設置cookie的時候也不用先用escape函數(shù)編碼,這時JS也能直接讀取cookie的值
相關學習推薦:PHP編程從入門到精通