めも: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で置換されてしまう文字+/=を置換されない文字-_,に置換したものでやりとりする。