いまさらPHPで文字化け。

いまさらですが、最近またPHPでの文字化けに遭遇したのでメモしておきます。

そもそもなんでいまさらPHPでの文字化けに遭遇したのか、なんですが、最近では Ajax が当たり前になって、ページの一部を帰す場合が多いんです。
その際にサーバによっては、ページの一部だけが文字化けしてしまいました。
「サーバによって」の部分が重要で、PHPかApacheの設定が異なっているためだと推測出来ました。

結局、Apacheの設定では「AddDefaultCharset」、PHPの設定では「default_charset」が原因でした。
特にPHPの設定である「default_charset」について理解するには、PHPの動作を理解する必要があります。

PHPは常にheader情報の「Content-Type」を出力するようで、その際に「default_mimetype」と「default_charset」を用いる仕様となっています。
デフォルト値は「text/html」と「」(空→charset無し)となっています。

結局、Ajaxでページの一部を帰す場合には
header( ‘Content-Type: text/html; charset=UTF-8’ );
か、または
ini_set( ‘default_mimetype’, ‘text/html’ );
ini_set( ‘default_charset’, ‘UTF-8’ );
としてからコンテンツを出力すべきです。

今後はアプリケーションの設定ファイルで後者(ini_set)を採用していこうと思っています。


コメントを残す

メールアドレスが公開されることはありません。

*