我使用官方MsgPack版本(http://msgpack.org/),在服務器端爲PHP 7安裝,並且在客戶端(任何瀏覽器)上包含爲庫(msgpack.js)。讓在瀏覽器包簡單ArrayBuffer與msgpack:PHP和Javascript之間的Msgpack
function s2b (s) {
var b = new Uint8Array(s.length);
for (var i = 0; i < s.length; i++) {
var c = s.charCodeAt(i);
if (c > 255) throw new Error("Wide characters are not allowed");
b[i] = c;
}
return b;
}
var test = { 'name': s2b('value').buffer };
console.log('packed', new Uint8Array(msgpack.pack(test)));
和這裏是控制檯輸出:包裝[129,164,110,97,109,101,196,5,118,97,108,117, 101]
我們在這裏看到,在'value'ascii代碼之前,我們有兩個額外的mspack標誌 - 196(數據類型是ArrayBuffer)和5(ArrayBuffer數據長度)。這裏一切都很清楚。
問題是 - 如何在PHP中構造相同的對象?讓我們看看我的代碼:
$data = [
"name" => 'value',
];
$packed = msgpack_pack($data);
for($i = 0; $i < strlen($packed); $i++) echo ord($packed[$i]) . ",";
輸出是: 「129,164,110,97,109,101,165,118,97,108,117,101,」
顯然[196,5]更改爲[165]。我明白,在PHP代碼中,變量的類型是字符串,但是如何在PHP中模擬ArrayBuffer(原始二進制)數據?
我試過PHP包(),但這沒有幫助。