微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 使用UTF8将Javascript十六进制转换为二进制

我将数据存储在sqlite数据库中作为BINARY(16),其值由PHPhex2bin函数在32个字符的十六进制字符串上确定.

例如,字符串434e405b823445c09cb6c359fb1b7918返回CN @ [4EÀ¶ÃYûy.

存储在此数据库中的数据需要由JavaScript操纵,为此,我使用了以下函数(改编自Andris的答案here):

// Convert hexadecimal to binary string
String.prototype.hex2bin = function ()
{

    // Define the variables
    var i = 0, l = this.length - 1, bytes = []

    // Iterate over the nibbles and convert to binary string
    for (i; i < l; i += 2)
    {
        bytes.push(parseInt(this.substr(i, 2), 16))
    }

    // Return the binary string
    return String.fromCharCode.apply(String, bytes)

}

这按预期工作,从434e405b823445c09cb6c359fb1b7918返回CN @ [4EÀ¶ÃYûy.

然而,我遇到的问题是,当直接处理PHP的hex2bin函数返回的数据时,我得到字符串CN @ [ 4E Y y而不是CN @ [4EÀ¶ÃYûy.这使得我无法在两者之间工作(对于上下文,JavaScript被用于为使用从PHP Web应用程序检索的数据工作的离线iPad应用程序提供动力)因为我需要能够使用JavaScript来生成32 -character十六进制字符串,将其转换为二进制字符串,并使用PHP的hex2bin函数(和sqlite的HEX函数).

我相信这个问题是JavaScript使用UTF-16而二进制字符串存储为utf8_unicode_ci.我最初的想法是,我需要将字符串转换为UTF-8.使用谷歌搜索引导我到here搜索StackOverflow引导我到bobince的答案here,两者都推荐使用unescape(encodeURIComponent(str)).然而,这确实回归了我需要的东西(CN @ [ 4E Y y]:

// CN@[Â4EöÃYûy
unescape(encodeURIComponent('434e405b823445c09cb6c359fb1b7918'.hex2bin()))

那么我的问题是:

如何使用JavaScript将十六进制字符串转换为UTF-8二进制字符串?

解决方法:

您的应用程序不必在任何时候处理二进制文件.插入是最新的可能点,这就是你的地方
最后转换为二进制.选择是最早可能的点,这是你转换为十六进制的地方,并使用
整个应用中的十六进制字符串.

插入时,可以用blob文字替换UNHEX:

INSERT INTO table (id)
VALUES (X'434e405b823445c09cb6c359fb1b7918')

选择时,你可以HEX:

SELECT HEX(id) FROM table

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐