ホムペ:文字化けHTML?PHP?POST?文字セット?

HTMLでどの文字セットを使ってるか指定しないと文字化けをおこす

文字化け問題でちょっと頭がつみかけてます( ̄▽ ̄;)
大体のHTMLのトラブルは、文字セットを指定してあげると問題は解決します。
文字セットとは、文字を表現する方法で、文字を出力する方法に違いがあります。
有名な表現方法にS-JISやUTFの二種類。また一時はやった文字の表現方法でEUCというものがあります。
Windowsなどは、Windows向けのS-JIS、他の端末でもS-JISで表現したがるのですが、現在主流なのは、UTF-8なので、文章やプログラムを組むときは、UTF-8という表現方法のテキストデータにエンコード(保存)する必要があります。
ところが、ブラウザでは、今もS-JISという表現方法で表現したいのか、上記の画像のように文字化けを起こしてしまいます。
この問題を解決するには


1.文字コードをUTF-8で書けるテキストエディタで書き、UTF-8でエンコーディングして保存する。
 難しいように感じますが、要は対応しているテキストエディタで保存すればOK。

2以下のコードをHTMLの<head>内(特にできれば<head>の次に)に記載する。

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

これで文字化けが解消されます。解消された結果の上の画像が↓になります。

コードを記載して文字化けが解消したページ

ここまでは、わかるんですが、ここからつまったのが、プログラムに記載内容をPOST(サーバー内に情報を送る方法)したところ文字化けを起こしてしまいました。

なぜかわからないですが、サーバーにPOSTされたものは、全てUTF-8以外の文字コードで解釈されてると思い。PHPに以下のコードを書きました。

echo mb_internal_encoding();

これで出力したところ、「UTF-8」と表示され問題なくブラウザから「UTF-8」でデータが送られて来てるのがわかりました。
つまり、送られてきたデータに誤りがないことを示します。
では、PHPが自身のファイルの文字セットが別の文字セットで解釈してるのでは?と次の一文を追加して、自分(PHP)に書かれてるのは、UTF-8で書かれてるよ!と次のコードを追加しました。

mb_internal_encoding(“UTF-8");

これで、文字コードを全てUTF-8でエンコーディングし、出来るか試したところ、POSTされてきたデータの文字化けは解消されました。これで、ようやくプログラムが組めると思って家に帰ってWindowsでプログラムを書こうとWindowsで作りかけのサイトを実行すると、再び文字化けに。どういうこっちゃ?

普段プログラムを書くのはアマゾンのFire10(Android 10)なのですが、どうやらブラウザ毎に違う解釈をされてるみたいです。もはや訳がわからない。デバッグで打ち出した確認コードのところは、「UTF-8」を示しており、今回も問題があったわけではなさそうです。もう闇雲でしたが、いちかばちかさっきのコードと以下コード2行のコードを追加してみました。

header(“Content-type: text/html; charset=UTF-8");
mb_language(“Japanese");
mb_internal_encoding(“UTF-8");

headerで書かれたコードは、HTMLに書かれた

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

に準じます。HTMLとPHPは、密接な環境があるようで、JAVAだと、jspファイルは、servletコンテナでプログラムを解釈して、プログラムの出力結果をhtmlとして出力しますが、PHPでは、HTMLの機能相当かHTMLの機能をプログラムに実装できるみたいです。なので、headerといった処理は<head>内に書くべきですが、今回はHTMLにもUTF-8でHTMLを書いてるよ!と指定してるので、やみくもですがphpの戦闘に3個の指定をしてみました。

結果は、自分の持ってる、どのブラウザ、環境でも文字化けしなくなりました。
結果は、少し納得できないですが、とりあえず文字化け問題からは解決できました。

ホームページ

Posted by pokedon