php与js的十六进制字符串互转

php与js的十六进制字符串互转

php与js的十六进制字符串互转

一个项目碰到了一个问题,就是php的bin2hex 字符转十六进制与js的字符转十六进制在转换英文的时候没有问题,但是在转换中文的时候差别就大了,解决的办法很简单,就是在中文的时候进行urlecode,转回来的时候加一个urldecode

js也是,加上encodeURL与decodeURL

示例如下:

<?php
echo bin2hex(urlencode("专业的it一站式学习开发部署平台"));
echo "<br/>";
echo urldecode(hex2bin("2545342542382539332545342542382539412545372539412538346974254534254238253830254537254142253939254535254243253846254535254144254136254534254239254130254535254243253830254535253846253931254539253833254138254537254244254232254535254239254233254535253846254230"));

?>

js的

<script type="text/javascript">
    var stringtoHex = function (str) {
        var val = "";
        for (var i = 0; i < str.length; i++) {
            if (val == "")
                val = str.charCodeAt(i).toString(16);
            else
                val += str.charCodeAt(i).toString(16);
        }
        // val += "0a"
        return val
    };
    var hexToString = function(str) {
        var trimedStr = str.trim();
        var rawStr =
        trimedStr.substr(0, 2).toLowerCase() === "0x"
        ?
        trimedStr.substr(2):
        trimedStr;
        var len = rawStr.length;
        if (len % 2 !== 0) {
            alert("不正确的 ASCII格式字符串 Code!");
            return "";
        }
        var curCharCode;
        var resultStr = [];
        for (var i = 0; i < len; i = i + 2) {
            curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
            resultStr.push(String.fromCharCode(curCharCode));
        }
        return resultStr.join("");
    };

    document.write(stringtoHex(encodeURI("专业的it一站式学习开发部署平台")));
    document.write("<br/>");
    document.write(decodeURI(hexToString("2545342542382539332545342542382539412545372539412538346974254534254238253830254537254142253939254535254243253846254535254144254136254534254239254130254535254243253830254535253846253931254539253833254138254537254244254232254535254239254233254535253846254230")));

</script>


{{collectdata}}

网友评论0