[PHP-users 34067] Base64 encodeの結果の違い

Atsushi rmitcs @ gmail.com
2008年 9月 30日 (火) 10:58:18 JST


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 メーリングリストの案内