54

アプリケーションの URL サフィックスをエンコードしています。

$url = 'subjects?_d=1';
echo base64_encode($url);

// Outputs
c3ViamVjdHM/X2Q9MQ==

「X2」の前のスラッシュに注意してください。

なぜこうなった?base64 はパディングとして AZ、0-9、および '=' のみを出力すると思いましたか?

4

7 に答える 7

112

いいえ。Base64 アルファベットには、A ~ Z、a ~ z、0 ~ 9、+およびが含まれ/ます。

他のアプリケーションへの移植性を気にしない場合は、それらを置き換えることができます。

参照: http://en.wikipedia.org/wiki/Base64#Variants_summary_table

これらのようなものを使用して、代わりに独自の記号を使用できます (もちろん、base64 ベースのアルファベットでない限り、 and を任意のものに置き換えてください!) -_

次の例では、RFC 4648 で指定されているように、通常の base64 を base64url に変換します。

function base64url_encode($s) {
    return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));
}

function base64url_decode($s) {
    return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));
}
于 2012-07-12T10:11:36.437 に答える
18

上記のすべての回答に加えて、それ/が予想されるbase64アルファベットの一部であることを指摘すると/、エンコードされた文字列で a を見た特定の理由は、テキストをbase64エンコードするときに a を生成する唯一の方法は、 3 で割り切れる位置にあるクエスチョン マーク。ASCII/

于 2016-04-29T15:00:14.887 に答える
6

ごめんなさい、あなたの考えは間違っていました。A-Za-z0-9 では 62 文字しか取得できません。Base64 では、PHP の場合/+.

于 2012-07-12T10:11:44.170 に答える
4

それには特別なことは何もありません。

ベース 64 の「アルファベット」または「数字」は、AZ、az、0 ~ 9 に加えて、2 つの追加文字 + (プラス) および / (スラッシュ) です。

必要に応じて、後で / を %2f でエンコードできます。

于 2012-07-12T10:12:13.007 に答える
2

AZ は 26 文字です。0-9 は 10 文字です。= は 1 文字です。これで合計 37 文字になり、64 文字には少し足りません。

/は 64 文字の 1 つです。ウィキペディアのページで完全なリストを見ることができます。

于 2012-07-12T10:11:47.643 に答える
2

base64 の場合、有効な文字セットは次のとおりです。

= は、最後のバイトのフィラーとして使用されます

M.

于 2012-07-12T10:12:38.463 に答える