PHPで取得したEXIFのユーザコメントが文字化けしてしまいます。


exif_read_dataで
EXIF,UserCommentを読み込んでいますが、
文字化けしてしまいます。
mb_convert_encodingで色々試しましたが解決できません。

できればライブラリ等を使わずにできる方法を
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/11/26 23:31:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント100pt

ごめんなさい。勘違いしていました。

#2の回答は無視してください。


16bit unicode little endian でエンコードされています。

これをShift_JIS で表示するためには下記のようにします。

$UserCommentに UserComment.exif の値が入っているものとします。

$bin = substr($UserComment, 8);
$str = mb_convert_encoding($bin, 'SJIS', 'UCS-2LE');
echo $str;
id:lemon-st

表示されました!

有難うございました。

2008/11/26 23:27:28

その他の回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント20pt

おそらく文字化けだと思うので、以下の情報をお願いします。

1.UserCommentに代入したテキスト本文

2.UserCommentのバイナリデータ

echo bin2hex(UserCommentの値)

のようにすれば、16進数で表示されます。

id:lemon-st

1.テスト

2.554e49434f444500c630b930c830

です。

2008/11/26 21:21:54
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント20pt

うーん、文字コードではないですね。

  1. EXIFを埋め込んだアプリケーションは何でしょう。それは日本語に対応していますか?
  2. UserCommentに、正常に「テスト」と登録されていますか。他のExifツールを使って正常に「テスト」と表示することはできますか?
id:lemon-st

1.Windowsのプロパティでコメントを入れました。

2.PhotoshopでもEXIF情報に「テスト」と表示されました。

Exif専用ツールじゃないとダメなのでしょうか。

ちなみにUserCommentの最初の8バイトは文字コードを表しているようで、

UNICODEと表示されます。mb_detect_encodingで調べるとASCIIとなります。

2008/11/26 22:44:00
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633ここでベストアンサー

ポイント100pt

ごめんなさい。勘違いしていました。

#2の回答は無視してください。


16bit unicode little endian でエンコードされています。

これをShift_JIS で表示するためには下記のようにします。

$UserCommentに UserComment.exif の値が入っているものとします。

$bin = substr($UserComment, 8);
$str = mb_convert_encoding($bin, 'SJIS', 'UCS-2LE');
echo $str;
id:lemon-st

表示されました!

有難うございました。

2008/11/26 23:27:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません