[PHP] 日本語が出力できないときは文字コードを疑え

日本語が格納された変数を htmlspecialchars すると "空" になる

example.php
$example = 'こんにちは';

/* なにも表示されない */
echo htmlspecialchars($example, ENT_QUOTES, 'UTF-8');

原因は文字コード

簡単なコードだったので、メモ帳を使ってつくった
  ↓
エラーメッセージに日本語を使ってる
  ↓
メモ帳の文字コードはShift_JIS
  ↓
文字化け
  ↓
出力の際のhtmlspecialcharsが化けた値を削除?
  ↓
空に。

ということらしい。

第3引数にSJISを指定するか、ファイルの文字コードをUTF-8にするとなおった

example.php
htmlspecialchars($example, ENT_QUOTES, 'SJIS');

メモ帳を使ってコーディングする際はご注意を

追記

[PHP]htmlspecialchars()を使うと文字が消える? | PHP Archive

この引数を省略すると、PHP 5.4.0 より前のバージョンでは ISO-8859-1 、PHP 5.4.0 以降では UTF-8 が指定されます。
そして、指定されたエンコーディングとして有効でない文字は切り捨てられます。

とのこと

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.