プロが教えるわが家の防犯対策術!

PHPからjavascriptにバイナリデータ(16バイト程度)を受け渡す
処理を作成しているのですが、うまく動作しないので、相談します。

バイナリデータをエンコードしてPHPからjavascriptに
以下の流れで引き渡しています。

(1)PHPのbase64_encodeでバイナリデータをエンコード
(2)エンコードしたデータをjavascriptに出力
(3)javascriptでデータをデコード

(3)のデコードには次のページのbase64.jsなど、いくつかの
デコード方法を試してみました。
http://www.onicos.com/staff/iz/amuse/javascript/ …
しかしながら(1)の元のデータと(3)でデコードしたデータが
一致しません。
質問したいのは以下の2点です。

・PHPのbase64_encodeとjavascriptのbase64エンコードは
 一般的に方式が違うのでしょうか。同じbase64なので
 同じコードが生成されると考えたのですが、そうでは
 ないのでしょうか。
・base64_encodeでも、その他の方法でもかまわないので
 PHPとjavascriptで共通なエンコード方式、あるいは
 PHP上のバイナリデータをjavascriptに正しく受け渡す
 方法があれば教えて下さい。

よろしくお願いします。

A 回答 (3件)

…とりあえず質問に直接答えます。



>・PHPのbase64_encodeとjavascriptのbase64エンコードは
>一般的に方式が違うのでしょうか。

一般も何もありません。Base64はこの世で一つです。言語の違いは関係なく、どの言語でも必ず同じ結果になります。


あなたは期待する結果にならない原因を言語の違いに求めようとしているようですがその可能性はまずありません。あなたのプログラムに間違いがあるのでしょう。その前提で何度も見直しましょう。

どうしても自分では見つけられないという場合には、ソースコードを張りましょう。そしてどのようなデータでうまく行かないのかを明示しましょう。


※個人的には、「バイナリデータ」と言っているのが実はマルチバイトの文字列の事で、サーバ側とクライアント側で文字コードが違ってしまっているだけという初歩的なミスである可能性が高いのではないかと推測します。

この回答への補足

回答を参考にして、いろいろ試している中で新たな
疑問が出てきました。新しく質問をしなおしたの
ですが、今度はテスト用のソースも入れていますので、
よろしければ見ていただけますか。

http://oshiete.goo.ne.jp/qa/8517290.html

補足日時:2014/03/17 12:04
    • good
    • 0
この回答へのお礼

言語によるBase64の違いはないということでしたので
もう一度処理を見直してみたいと思います。
ありがとうございました。

お礼日時:2014/03/14 14:27

「PHPの結果とJavaScriptの結果が異なる」というのはJavaScriptが間違っているという事ではありません。


PHPの動作が期待通りでなくても、同様にPHPとJavaScriptで異なる結果になります。

2カ所での動作が違うという事は、どこかに設計ミスや作成にミスがあるからです。
    • good
    • 0
この回答へのお礼

2度目の回答をいただいて、ありがとうございました。
設計ミスや作成にミスがあるのではということでしたので
処理を調べている内に新たな疑問が出てきました。
新しく質問をしなおしましたので、よろしければ見て
いただけますか。

http://oshiete.goo.ne.jp/qa/8517290.html

お礼日時:2014/03/17 12:09

私もバイナリデータのBASE64変換は高度なJavaScript技集のライブラリを使わせてもらっています。


いくつかライブラリがありますが、私が調べた中では、唯一バイナリデータに対応していましたので。

本当にデコードが原因ですか?


データが破損する可能性は何カ所かあります。
それら全てをチェックして、破損していないことを確認してください。

・PHPのデータ入力時(ファイル読み込みなど)
・PHPのエンコード時
・PHPからの送信時
・PHPの確認用データ保存時
・JavaScriptの受信時
・JavaScriptのデコード時
・JavaScriptの出力時(画面描画など)

データが破損する可能性がある箇所はおそらくもっとあると思いますが、
1カ所でも破損が確認できれば、それが原因です。

この回答への補足

データが破損している可能性が何箇所かであるということですが、
それぞれの処理結果を出力して確認しデコード部分でデータの
不一致が起こっていることがわかっています。
そのためPHPとjavascriptのエンコード・デコードの処理に
ついて質問しています。
よろしくお願いします。

補足日時:2014/03/14 00:22
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2014/03/14 00:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!