1

私はbase64_decodeこの文字列にPHPを使用しています:

Dg+to8RaC3VzAGRThP7iiXe0f5bgp7xmcQoqaAJxggs=

32バイトのデータを返す必要があります。しかし、どういうわけか、私はたった31バイトの長さの文字列になってしまいます。

これは私がしていることです:

$data = base64_decode($data);
if($data == FALSE)
{
    die("decode faild");
}

問題は、デコードが実際に機能することです。ただし、返されるのは31バイトだけです。これを行う$len = strlen($data);$len、32文字ではなく31文字が含まれます。

次の文字列で(奇妙なことに)中華なべをします:

az8XFgxw/ODAr3EDElvgab/axINKVMDCrw5u51gn6bo=

urlencodeデコード後base64とデコード前にすでに試しましたurldecodeが、結果はまったく同じでした(動作しましたが、1バイトが省略されました)

私は何が欠けていますか?


編集:私はすべてのバイトを印刷しました。それは本当に最後のバイトを省略します!0x0B(最後のバイト)が欠落していますが、他のバイトはあります。

編集2:追加のテストで次のようになります。1。base64文字列をPHPファイルに直接埋め込むと、常に機能します。2.変数base64から文字列を取得すると、$_GET機能しない場合があります。

$_GET壊れていますか?

4

1 に答える 1

4

それは私の友達です、それは(スペース)+として解釈されています。したがってurl_encode()、データをURLに追加してからurl_decode()スクリプトに追加する前、または単にスペースを。に置き換えてください+

$data = base64_decode(str_replace(' ', '+', $data));
于 2012-07-19T14:49:40.250 に答える