アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境:RedHat8/apache2/php4.3.1

私のもっているPHPの本に、
php.iniでmbstring.http_output = SJISを指定した
場合、画像データが壊れる場合があると記述されている
ので実際に試して見たのですが、テキストも画像も問題
なく表示されました。

予想では、画像データの0Aが0D0Aに自動変換されると
思ったのですが、画像データに変換された形跡はあり
ませんでした。

【質問1】
画像が壊れないのは、PHP4.3.1で画像データを変換しない
様に対応したのでしょうか?

【質問2】
私の予想が的外れで、違う壊れ方が発生するのでしょうか?

【質問3】
php.iniでmbstring.http_output = SJISを指定しても
画像データが壊れない方法があれば教えてください。

A 回答 (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して
しまう "場合がある" ため「壊れる場合がある」という
表現なのです。
    • good
    • 0
この回答へのお礼

回答ありがとう御座います。
分かり易い回答で、良く理解出来ました。

お礼日時:2003/06/13 07:42

【質問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()へ変換して出力してみるとどんな壊れ方になるかわかります。
    • good
    • 0
この回答へのお礼

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

「Content-Type: text/html」って、HTMLヘッダでの
指定の事でいいんでしょうか?

画像が壊れる場合は、例えばEUCからS-JISへの文字コード
変換が、画像データにも適用されるから壊れると理解して
良いのでしょうか?(改行コード以外も変換する)

ob_start()を使ってやって試したいのですが、ob_start()
が理解できないので、もっと勉強してみます。

お礼日時:2003/06/08 19:25

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