You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GrahamGreen的phpserialize Go库存在单引号转义Bug

Go语言PHP序列化库反序列化二进制字符串失败问题

测试用例执行失败,原因是库"github.com/grahamgreen/phpserialize"错误地转义了单引号字符。可正常工作无报错的替代库为:trim21 "github.com/trim21/go-phpserialize"。

以下是测试代码:

import (
    "encoding/base64"
    "encoding/hex"
    "encoding/json"
    "fmt"
    "github.com/elliotchance/phpserialize"
    graham "github.com/grahamgreen/phpserialize"
    "os"
    "reflect"
    "strconv"
    "testing"
)

func TestGrahamGreenLibrary_BinaryString(t *testing.T) {
    const sentHex = "00000000000000358e010000019e26b95c27000e3b2c0920bb37bb000000000000000000000200000000000200c0000027100057000f4240000000000100002a54"
    binData, _ := hex.DecodeString(sentHex)
    rawData := string(binData)

    serialized := "a:1:{" + phpSerStr("rawData") + phpSerStr(rawData) + "}"

    result, err := graham.UnmarshalAssociativeArray([]byte(serialized))
    if err != nil {
       t.Fatalf("graham Unmarshal: %v", err)
    }

    got, _ := result["rawData"].(string)
    if got != rawData {
       t.Errorf("RawData mismatch:\ngot  (%d bytes): %x\nwant (%d bytes): %x",
          len(got), got, len(rawData), rawData)
    }
}

func phpSerStr(s string) string {
    return "s:" + strconv.Itoa(len(s)) + ":\"" + s + "\";"
}

该测试用于验证二进制字符串的反序列化,使用GrahamGreen的库时会出现数据不匹配错误。

内容的提问来源于stack exchange,提问作者kukulis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 01:24:53