アプリケーションの URL サフィックスをエンコードしています。
$url = 'subjects?_d=1';
echo base64_encode($url);
// Outputs
c3ViamVjdHM/X2Q9MQ==
「X2」の前のスラッシュに注意してください。
なぜこうなった?base64 はパディングとして AZ、0-9、および '=' のみを出力すると思いましたか?
いいえ。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));
}
上記のすべての回答に加えて、それ/
が予想されるbase64
アルファベットの一部であることを指摘すると/
、エンコードされた文字列で a を見た特定の理由は、テキストをbase64
エンコードするときに a を生成する唯一の方法は、 3 で割り切れる位置にあるクエスチョン マーク。ASCII
/
ごめんなさい、あなたの考えは間違っていました。A-Za-z0-9 では 62 文字しか取得できません。Base64 では、PHP の場合/
と+
.
それには特別なことは何もありません。
ベース 64 の「アルファベット」または「数字」は、AZ、az、0 ~ 9 に加えて、2 つの追加文字 + (プラス) および / (スラッシュ) です。
必要に応じて、後で / を %2f でエンコードできます。
AZ は 26 文字です。0-9 は 10 文字です。= は 1 文字です。これで合計 37 文字になり、64 文字には少し足りません。
/
は 64 文字の 1 つです。ウィキペディアのページで完全なリストを見ることができます。
base64 の場合、有効な文字セットは次のとおりです。
= は、最後のバイトのフィラーとして使用されます
M.