そもそも 基本的に内部的な文字コードは(ソースファイルもDBもその他の設定も)全てUTF-8にしておき、POSTやGETなどで入力値を受け取る時には入力値をUTF-8に変換してから使うのが良いと思うし、そうすれば漏れがない限りはhtmlSpecialChars()等で出力時に不正文字コードを気にする必要はない。 しかし 現実的にはPOST/GETで受け取る以外にも下記の様に様々な方法でデータが入ってくることもある。 URLの一部から取り出す テキストファイルから読み込む APIで取得する(例えば、Amazon Production Advertising APIのレスポンスXMLにUTF-8でない文字列が入ってることがあった...) Cookieから取り出す アップロードされたファイルのファイル名(PHPのバージョンによっては入力値扱いとして変換される。参考:文字エンコーディングの妥当性確