JS が PHP に設定された中国語の cookie を読み取るときに文字化けするコードの解決策: 1. まずエスケープ関数を使用して PHP でエンコードし、クライアントに到達するときに js で unescape デコードを使用します; 2. [setrawcookie() ] 関数を使用して Cookie の値を置き換えます。
JS が PHP で設定された中国語の Cookie を読み取るときに発生するコードが文字化けする問題の解決策:
PHP で最初に使用します。エスケープ関数を使用してエンコードし、クライアントに到達するときに js で unescape デコードを使用します。
エスケープ関数は次のとおりです:
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()
関数を使用できます。この関数は Cookie 値を設定するときにエンコードされないため、Cookie を設定するときにエスケープ関数を使用してエンコードする必要はありません。 、JS で直接読み取ることもできます。Cookie の値
関連する学習の推奨事項:初心者から熟練度までの PHP プログラミング
以上がPHPで設定した中国語CookieをJSが読み込むと文字化けが発生する場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。