PHPで escapeshellcmd でエスケープしていると、日本語が消えて困ったのでメモ
escapeshellcmd()を使用するシーン
PHPでファイルダウンロードなど実装する際に、
セキュリティ対策のOSコマンドインジェクションをさせないように、
escapeshellcmd() を使うことが多いと思います。
不幸は突然に
ある日突然マルチバイト文字(日本語)が消えてしまい、
なんだろうと思い、デバッグしていくと、この escapeshellcmd() に引っ掛かりました。
(そもそもマルチバイト文字は推奨しない感じがしますが、ここでは割愛)
原因
OS替えなどで、ロケール情報が取れなくなったようです。
対策
escapeshellcmd() 実行前に以下設定すると直りました。
setlocale(LC_CTYPE, "UTF-8", "ja_JP.UTF-8");