ppython使用問題

我在使用ppython中發生
a:2:{i:0;s:28:"test::go";i:1;s:60:"files\2716e8e7046cf4bffe1fd8702170f34df97b55bb1676025694";}'
這個值為p
進入z_decode(p)轉換後
params 顯示為空白

def parse_php_req(p):
    """
    解析PHP请求消息
    返回:元组(模块名,函数名,入参list)
    """
    while p:
        v,p=z_decode(p)         #v:值  p:bytes(每次z_decode计算偏移量)
        params = v

    modul_func = params[0]      #第一个元素是调用模块和函数名
    #print("模块和函数名:%s" % modul_func)
    #print("参数:%s" % params[1:])    
    pos = modul_func.find("::")
    modul = modul_func[:pos]    #模块名
    func = modul_func[pos+2:]   #函数名
    return modul, func, params[1:]

def z_decode(p):
    """
    decode php param from string to python
    p: bytes
    """
    if p[0]==chr(0x4e):                      #NULL 0x4e-'N'
        return None,p[2:]
    elif p[0]==chr(0x62):                    #bool 0x62-'b'
        if p[2] == chr(0x30):                # 0x30-'0'
            return False,p[4:]
        else:
            return True,p[4:]
    elif p[0]==chr(0x69):                    #int  0x69-'i'
        i = index(p, chr(0x3b), 1)           # 0x3b-';'
        return int(p[2:i]),p[i+1:]
    elif p[0]==chr(0x64):                    #double 0x64-'d'
        i = index(p, chr(0x3b), 1)           # 0x3b-';'
        return float(p[2:i]),p[i+1:]
    elif p[0]==chr(0x73):                    #string 0x73-'s'
        len_end = index(p, chr(0x3a), 2)     # 0x3a-':'
        str_len = int(p[2:len_end])
        end = len_end + 1 + str_len + 2
        v = p[(len_end + 2) : (len_end + 2 + str_len)]
        #return str(v, php_python.CHARSET), p[end+1:]
        return v.encode(php_python.CHARSET), p[end+1:]
    elif p[0]==chr(0x61):                    #array 0x61-'a'
        list_=[]       #数组
        dict_={}       #字典
        flag=True      #类型,true-元组 false-字典
        second = index(p, chr(0x3a), 2)      # 0x3a-":"
        num = int(p[2:second])  #元素数量
        pp = p[second+2:]       #所有元素
        for i in range(num):
            key,pp=z_decode(pp)  #key解析
            if (i == 0): #判断第一个元素key是否int 0
                if (not isinstance(key, int)) or (key != 0):
                    flag = False            
            val,pp=z_decode(pp)  #value解析
            list_.append(val)
            dict_[key]=val
        return (list_, pp[2:]) if flag else (dict_, pp[2:])
    else:
        return p,''

有人可以幫忙嗎

您的代码是一个实现了PHP的序列化与反序列化的代码,这种方式是用于在PHP和其他语言之间传递数据的。代码中没有处理编码问题,因此无法解码字符串,导致出现空白。

如果要解决这个问题,您需要在代码中增加编码处理,可以通过下面这行代码:

css
Copy code
v = p[(len_end + 2) : (len_end + 2 + str_len)].decode(php_python.CHARSET)
来解决编码问题。