- ベストアンサー
shellとWebでperlからphp(pukiwiki)を実行時、UTF8とBINARYとに扱いが異なる問題
- webからアクセスした際、表示が文字化けする問題が発生しています。どのように対処すれば解決できるでしょうか。
- shellとWebからのアクセスでは、文字コードの扱いが異なるために文字化けが発生します。
- pukiwikiのスクリプトの文字コードと出力はUTF-8であるため、文字化けが発生する原因を特定して対処する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> また、shellとWebからでは、どうして文字コードの扱いが異なるのでしょうか このご質問についてですが、一言で言えば、「違ってあたりまえ」です。 Shell の場合、化けないためには Shell 自身では無くて使用しているターミナルウィンドウの文字コードとプログラム(この場合は test.cgi)が STDOUT に出力する文字コードが一致している必要があります。 ターミナルウィンドウは、普通は文字コード固定です。 (ユーザーが設定できるものもありますが、実行中に自動的には切り替わりません) 一方で、Webの場合は、ブラウザ(InternetExplorer とか Firefox とか)の文字コードとWebサーバーから送られる (CGIが生成した)HTML の文字コードが一致している必要があります。 Webブラウザは、ページ毎に文字コードを切り換えるのが普通です。 切り替えの基準は以下のとおりですが、正しい切り替えに誘導するのはCGI設置者の責任です。 ・Content-Typeレスポンスヘッダ中の charsetパラメーター。 業界規格では最優先と決められています。 Content-Typeレスポンスヘッダは、CGIから出力できます。 CGIが省略すればWebサーバーが付けてくれますが、正しい charset が付くとは限りません。 (Webサーバーの設定や .htaccess で決まります) ・HTML内の METAタグ中の Content-Type の charset。 ブラウザによっては、これを最優先にしてるかも知れません。 規格違反ですが。 ・自動判定 Webページ作成者としては、これに頼るのはやめましょう。 以上を念頭に置いて、まずは「化けないシンプルなWebページ」を確実に作れる様になってから、改めて本来の目的での問題を考えられてはいかがでしょうか。