PHP ファイルをあえて文字化けさせたかったのだが・・・
- PHP ファイルの文字コード:UTF-8
- PHP ファイル内の
<head>
の charset:Shift_JIS
上の条件で、PHP ファイルを表示して文字化けを起こそうとした。しかし、結果は 文字化けせず。「?」となったが、原因は単純だった。
ブラウザの表示
使用環境
Windows + Apache + PHP
ブラウザ:Google Chrome
文字化けしなかった原因
ブラウザで、PHP ファイルを表示した時の 「php.ini」 の default_charset
の設定値が、UTF-8 になっていたため。
ついでに、この時の HTTP レスポンスの Content-Type に指定されている charset を見てみたら、UTF-8 になっていた。つまり・・・
- PHP ファイルの文字コード:UTF-8
-
「php.ini」の
default_charset
:UTF-8
で文字コードが一致していたために、文字化けが起きなかったのだ。
結局、文字化けさせるには・・・
「php.ini」の default_charset
の設定値を UTF-8 以外 の文字コードにする。(今回は、Shift_JIS にした)
【2023年12月2日 追加】
ただし、提示した 「php.ini」を書き換える方法は、全てのPHP ファイルに影響を与えてしまう とのコメントをいただいた。まったくそのとおりだ。開発環境を他人と共有している場合は、迷惑を掛けてしまうことになる。
よって、「php.ini」の書き換えで対応するよりは、該当コメントのとおり、文字化けさせたいPHP ファイルの文頭に ini_set()
を追加する方法の方が良い。ちなみに、この関数の有効期間は、PHP マニュアルには以下のとおり。
スクリプトの実行中は新しい値を保持し、 スクリプト終了時に元の値へ戻されます。
まとめ
- 文字化けさせたい場合は、「php.ini」の書き換えで可能。ただし上で書いたとおり、本記事では、文字化けさせたいPHP ファイルの文頭に
ini_set()
を追加する方法がベスト との結論とした。逆に、文字化けを解消したい場合にも応用可能。 -
PHP ファイル内の
<head>
の charset の変更では文字化けをあえて起こすことはできず、「php.ini」のdefault_charset
の設定値が優先されていることがわかる。