时间:2021-07-01 10:21:17 帮助过:27人阅读
var sha1=CryptoJS.SHA1("abc");document.write("sha1:",sha1);document.write("
");var sha1_Latin=sha1.toString(CryptoJS.enc.Latin1);document.write("sha1_Latin:",sha1_Latin);document.write("Latin.len:",sha1_Latin.length);document.write("
");var sha1_hex=strToHex(sha1_Latin);//此处为自己定义的一个函数,将字符串转换为ASCII的16进制形式document.write("hex:",sha1_hex);document.write("
");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);
'; echo strlen($username_php); echo '
'; echo bin2hex($username_php); echo '
';?>
浏览器的工作字符集是 unicode
传入的任何字符集内容都将在浏览器中自动转换成 unicode
比如
$gbk = '中文';$utf8 = iconv('gbk', 'utf-8', $gbk);if(isset($_GET['ch'])) { echo "utf8 = '$utf8'; document.write(gbk == utf8);";}else { echo ""; echo "";}打印 true
浏览器的工作字符集是 unicode
传入的任何字符集内容都将在浏览器中自动转换成 unicode
感谢指导,我在PHP端将写成如下代码,则SS和JS端生成的sha1_html完全一样了,不过还是没太完全理解你的意思,你是说从浏览器端发送到PHP端的Latin1编码被自动转换成了UTF-8?所以我在PHP端将接收到的数据的编码模式由UTF-8转换成Latin1模式以后就正确了?
那么我还有个疑问,就是我echo $SS;返回到浏览器端的字符编码模式也会被自动转换为UTF-8,我需要再将其在浏览器端转换成Latin1模式?
我写了下面的php端代码
'; echo strlen($SS); echo '
'; echo bin2hex($SS); echo '
';?>
不大理解你的疑问
浏览器会将收到的文本数据转成 unicode
浏览器在发送数据(比如表单提交)时会将 unicode 转成页面声明的字符集
如果你在 php 中按字节处理数据,那么要想得到和 js 处理相同的结果
需要将待处理的文字转成 ucs-2 字符集
不大理解你的疑问
浏览器会将收到的文本数据转成 unicode
浏览器在发送数据(比如表单提交)时会将 unicode 转成页面声明的字符集
如果你在 php 中按字节处理数据,那么要想得到和 js 处理相同的结果
需要将待处理的文字转成 ucs-2 字符集