めも:POSTでBASE64のデータを渡すときの注意 その2

めも:POSTでBASE64のデータを渡すとき、+がスペースに置換される - あんこの成長記録

もう少しわかったので、追記。

+が' 'に置換される原因は、おそらくPOSTを経由する際に、urldecodeされた値を受け取っているからっぽい。
urldecodeでは、urlencodeでエンコードされた%##がデコードされ、さらに+は' 'にデコードされる。


前回は、受け取ったものの' 'を+に置換してからdecodeという方法で対処しましたが、よさげな解決策があったのでそちらを。

function base64url_encode ($input) {
  return strtr(base64_encode($input), '+/=', '-_,');
}

function base64url_decode ($input) {
  return base64_decode(strtr($input, '-_,', '+/='));
}

base64エンコードしたもののうち、urlencodeで置換されてしまう文字+/=を置換されない文字-_,に置換したものでやりとりする。

参考:
Base64 - Wikipedia
PHP: base64_encode - Manual