[PHP-users 34068] Re: Base64 encodeの結果の違い

kunitsuji tsujioka @ m-s.co.jp
2008年 9月 30日 (火) 18:16:22 JST


 kunitsujiです。

少し前に自分も同じように戻らない現象にあいました。
とりあえず、、、、+とか=をGETで渡す前に違う文字に置換して、
GETを受取った際に元に戻して対応しましたが。。。。

もっとスマートな方法があれば自分も参考にしたいです。


>PHPでBase64でエンコードされたデータがウェブサービスに送られて、そこでデコード
>される際に元のデータに戻らないという症状で困っています。
>Base64でエンコードされたものはどのシステムでデコードしても同じオリジナルの
>データが得られると思っていたのですが、何かメソッドが違ったりすることがあるの
>でしょうか?
>
>環境はPHP5.2.6、Windows Server 2003、IISです。
>
>普通のアルファベットだけなら問題ないのですが、問題はここで変換しようとしてい
>るデータがスペイン語などで使われている、アルファベットの上にダッシュがある文
>字(例えば?????など)ということです。
>
>ネット上で公開されているBase64変換サイトを使用してみると、2種類の結果があるよ
>うです。
>
>http://ostermiller.org/calc/encode.html
>このページで上記の?????をエンコードすると7fP68dE=になります。
>
>http://www.opinionatedgeek.com/dotnet/tools/Base64Encode/Default.aspx
>このページで同じ文字をエンコードするとw63Ds8O6w7HDkQ==となります。PHPの
>base64_encode()で変換した場合の結果はこちらのサイトと同じものになります。
>
>結果が違うので、片方の結果をもう片方のサイトでデコードしても元のデータに戻り
>ません。
>
>試しに、日本語で「あ」という文字を入れてみたのですが、やはりお互いに違う結果
>となります。ここでも、2番目のサイトの結果とPHPで変換した結果とは同じになりま
>す。
>おかしいのは、1番目のサイトで「あ」をエンコードした後に結果をデコードすると"B"
>という文字になってしまうことです。ただ、?????をエンコードしたものは正常に元の
>文字に戻ります。
>
>この原因は1番目のサイトが2バイト文字やこのような特殊な文字に対応していないた
>めに起こるものなのでしょうか?または他に問題があるのでしょうか?
>お分かりになる方がいらっしゃいましたらよろしくお願いいたします。
>_______________________________________________
>PHP-users mailing list  PHP-users @ php.gr.jp
>http://ml.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://oldwww.php.gr.jp/php/novice.php3
>-------------------------------text/plain-------------------------------
>_______________________________________________
>PHP-users mailing list  PHP-users @ php.gr.jp
>http://ml.php.gr.jp/mailman/listinfo/php-users
>PHP初心者のためのページ - 質問する前にはこちらをお読みください
>http://oldwww.php.gr.jp/php/novice.php3


PHP-users メーリングリストの案内