'; echo $username_php; echo '
'; echo strlen($username_php); echo '
'; echo bin2hex($username_php); echo '
';?>
該代碼JS端自主輸出的
sha1_Latin:>6Gjº>%qxPÂlÐØ / /此段為sha1(“abc”)產生的字串
Latin.len:20
hex:a9993e364706816aba3e25717850c26c9cd0d89d//此段為sha1_Latin的16進位字串形式,可以確定此處的hex轉換是正確的
而通過AJAX傳輸到php後在瀏覽器端輸出的
>6Gjº>%qxPÂlÐØ //此處看著仍和前面的sha1_Latin對應
29//此處的長度不對應了
c2a9c2993e364706c2816ac2ba3e25717850c3826cc29cc390c398c29d//轉換為16進位發現和前面的hex不一樣,觀察發現多了一些c2,c3,請問是為什嗎?????
回複內容:
'; echo $username_php; echo '
'; echo strlen($username_php); echo '
'; echo bin2hex($username_php); echo '
';?>
該代碼JS端自主輸出的
sha1_Latin:>6Gjº>%qxPÂlÐØ / /此段為sha1(“abc”)產生的字串
Latin.len:20
hex:a9993e364706816aba3e25717850c26c9cd0d89d//此段為sha1_Latin的16進位字串形式,可以確定此處的hex轉換是正確的
而通過AJAX傳輸到php後在瀏覽器端輸出的
>6Gjº>%qxPÂlÐØ //此處看著仍和前面的sha1_Latin對應
29//此處的長度不對應了
c2a9c2993e364706c2816ac2ba3e25717850c3826cc29cc390c398c29d//轉換為16進位發現和前面的hex不一樣,觀察發現多了一些c2,c3,請問是為什嗎?????
因為字串被轉碼成別的編碼了。你有沒有發現前面添加c2
、c3
的都是那些大於等於0x80
的編碼字元?
解決方案,設定頁面編碼、傳輸編碼、PHP接收編碼一致,都為Latin1
,以防止瀏覽器或PHP自動轉碼
為什麼不傳 a9993e364706816aba3e25717850c26c9cd0d89d
這個字串呢?
xmlhttp1.open("GET","web/tes.php?sha1_html="+sha1_hex,false);//發送G給伺服器xmlhttp1.send();document.write(xmlhttp1.responseText);