LoginSignup
0
0

PHP ファイルの内容をブラウザに表示し、意図的に文字化けさせたい場合

Last updated at Posted at 2023-11-26

PHP ファイルをあえて文字化けさせたかったのだが・・・

  • PHP ファイルの文字コード:UTF-8
  • PHP ファイル内の <head> の charset:Shift_JIS

上の条件で、PHP ファイルを表示して文字化けを起こそうとした。しかし、結果は 文字化けせず。「?」となったが、原因は単純だった

article4-1.png

ブラウザの表示

article4-3.png

使用環境

Windows + Apache + PHP
ブラウザ:Google Chrome

文字化けしなかった原因

ブラウザで、PHP ファイルを表示した時の 「php.ini」 の default_charset の設定値が、UTF-8 になっていたため

article4-2.png

ついでに、この時の HTTP レスポンスの Content-Type に指定されている charset を見てみたら、UTF-8 になっていた。つまり・・・

  • PHP ファイルの文字コード:UTF-8
  • 「php.ini」の default_charset:UTF-8
    で文字コードが一致していたために、文字化けが起きなかったのだ。

結局、文字化けさせるには・・・

「php.ini」の default_charset の設定値を UTF-8 以外 の文字コードにする。(今回は、Shift_JIS にした)

article4-4.png

article4-5.png

【2023年12月2日 追加】
ただし、提示した 「php.ini」を書き換える方法は、全てのPHP ファイルに影響を与えてしまう とのコメントをいただいた。まったくそのとおりだ。開発環境を他人と共有している場合は、迷惑を掛けてしまうことになる。

よって、「php.ini」の書き換えで対応するよりは、該当コメントのとおり、文字化けさせたいPHP ファイルの文頭に ini_set() を追加する方法の方が良い。ちなみに、この関数の有効期間は、PHP マニュアルには以下のとおり。

スクリプトの実行中は新しい値を保持し、 スクリプト終了時に元の値へ戻されます。

まとめ

  • 文字化けさせたい場合は、「php.ini」の書き換えで可能。ただし上で書いたとおり、本記事では、文字化けさせたいPHP ファイルの文頭に ini_set() を追加する方法がベスト との結論とした。逆に、文字化けを解消したい場合にも応用可能
  • PHP ファイル内の <head> の charset の変更では文字化けをあえて起こすことはできず、「php.ini」の default_charset の設定値が優先されていることがわかる。
0
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0