- ベストアンサー
mbstring.http_outputによる画像データへの影響
- PHPのバージョン4.3.1では、画像データが壊れずに表示される
- 画像データの変換は行われず、予想外の壊れ方は発生しない
- mbstring.http_output = SJISを指定しても画像データが壊れない方法はない
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 「Content-Type: text/html」って、HTMLヘッダでの > 指定の事でいいんでしょうか? はい、そうです。 PHPでは特に指定しなければ「Content-Type: text/html」 がデフォルトになってますので、画像などを作成する場合は 明示的に header("Content-Type: image/gif"); などと記述する必要があります。 > 画像が壊れる場合は、例えばEUCからS-JISへの文字コード > 変換が、画像データにも適用されるから壊れると理解して > 良いのでしょうか?(改行コード以外も変換する) そうです。 Content-Typeが指定されていなければ、mb_internal_encoding() <--->mb_http_output()間の漢字コード変換に "偶然" Matchして しまう "場合がある" ため「壊れる場合がある」という 表現なのです。
その他の回答 (1)
- selenity
- ベストアンサー率41% (324/772)
【質問1】 PHP4.x.xのどこからかは忘れましたが、 Content-Type: text/html 以外を指定した場合、自動でhttp_output('pass');となるような仕様に変わりました。 そのため、画像など、image/gif等の場合は勝手に http_output('pass');な状態(無変換な状態)になっています。 【質問2】 green-time21さんが言っているのは単なる改行コードの変換です。 PHPのmbstringはそういったもんではなく、mb_internal_encoding()をmb_http_output() へ変換して出力する機能です。 従って、mbstringが稼動すると、バイナリーデータなどは変な変換結果になります。 ob_start()を使って出力時に強制的にmb_internal_encoding()からmb_http_output()へ変換して出力してみるとどんな壊れ方になるかわかります。
お礼
回答ありがとうございます。 「Content-Type: text/html」って、HTMLヘッダでの 指定の事でいいんでしょうか? 画像が壊れる場合は、例えばEUCからS-JISへの文字コード 変換が、画像データにも適用されるから壊れると理解して 良いのでしょうか?(改行コード以外も変換する) ob_start()を使ってやって試したいのですが、ob_start() が理解できないので、もっと勉強してみます。
お礼
回答ありがとう御座います。 分かり易い回答で、良く理解出来ました。