ホームページ >バックエンド開発 >PHPチュートリアル >JS側とPHP側のLatin1エンコーディングの不一致について
var sha1=CryptoJS.SHA1("abc");document.write("sha1:",sha1);document.write("<br>");var sha1_Latin=sha1.toString(CryptoJS.enc.Latin1);document.write("sha1_Latin:",sha1_Latin);document.write("Latin.len:",sha1_Latin.length);document.write("<br>");var sha1_hex=strToHex(sha1_Latin);//此处为自己定义的一个函数,将字符串转换为ASCII的16进制形式document.write("hex:",sha1_hex);document.write("<br>");var xmlhttp1;if (window.XMLHttpRequest) { xmlhttp1=new XMLHttpRequest(); }else { xmlhttp1=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp1.open("GET","web/tes.php?sha1_html="+sha1_Latin,false);//发送给php xmlhttp1.send(); document.write(xmlhttp1.responseText);
<?php $username_php=$_GET['sha1_html']; echo $username_php; echo '<br/>'; echo strlen($username_php); echo '<br/>'; echo bin2hex($username_php); echo '<br/>';?>
ブラウザの動作文字セットは Unicode です
渡された文字セットの内容はブラウザで自動的に Unicode に変換されます
たとえば、
$gbk = '中文';$utf8 = iconv('gbk', 'utf-8', $gbk);if(isset($_GET['ch'])) { echo "utf8 = '$utf8'; document.write(gbk == utf8);";}else { echo "<script>gbk = '$gbk';</script>"; echo "<script src=?ch=1 charset=utf-8></script>";}は true を出力します
ブラウザの動作文字セットは Unicode です
渡された文字セットの内容はブラウザで自動的に Unicode に変換されます
ご指導ありがとうございます。 PHP側のコード、SSとJSで生成されるsha1_htmlはまったく同じなのですが、ブラウザからPHP側に送られるLatin1エンコーディングが自動的にUTFに変換されるという意味でしょうか。 8?ということは、受信したデータのエンコードモードをPHP側でUTF-8からLatin1モードに変換すれば正しくなるでしょうか?
それではまだ質問があります。つまり、$SS; をエコーすると、ブラウザーに返される文字エンコーディング モードは自動的に UTF-8 に変換されます。ブラウザーで Latin1 モードに変換する必要がありますか?
次の PHP コードを書きました
<?php $sh=$_GET['sha1'];$sh1=sha1("abc",true);$SS=iconv("UTF-8","ISO-8859-1",$sh); echo $SS; echo '<br/>'; echo strlen($SS); echo '<br/>'; echo bin2hex($SS); echo '<br/>';?>
質問がよくわかりません
ブラウザは受信したテキスト データを Unicode に変換します
ブラウザがデータを送信するとき(フォーム送信など)、Unicodeをページで宣言された文字セットに変換します
phpでデータをバイト単位で処理する場合、jsと同じ結果を得たいとします処理
処理されるテキストは ucs-2 文字セットに変換する必要があります
質問がよくわかりません
ブラウザは受信したテキストを変換しますデータを Unicode に変換
ブラウザがデータを送信するとき (フォーム送信など)、Unicode をページで宣言された文字セットに変換します
PHP でデータをバイト単位で処理する場合、次のように取得します。 js処理と同じ結果
処理するテキストはucs-2文字セットに変換する必要があります
<?php $sh=$_GET['sha1'];$a="abc";$sh1=sha1("abc",true);$SS=iconv("UTF-8","ISO-8859-1",$sh);if($SS==$sh1) echo "true"; echo $SS;?>