巷にいろいろ mbstring の設定がありますが、一応携帯サイト用として自分なりにまとめたのを示します。
まず大前提として、
- DoCoMo -> Shift_JIS
- AU -> Shift_JIS
- SoftBank -> UTF-8
- その他(PC等) -> UTF-8
全部 Shift_JIS で統一してもいいんですが、
ソーシャルアプリなどの場合はこのエンコーディングの制約がつきます。
早速ですが。
;; 出力の文字コード変換をします。
;; 出力の際は透過的に文字コードの変換を行います
output_handler = mb_output_handler
;; DoCoMo, AU は ini_set('default_charset', 'Shift_JIS') する。
default_charset = UTF-8
;; 日本語です。
;; この設定が使われるのは mb_send_mail だけとか・・・?
mbstring.language = Japanese
;; 入出力文字に対する変換を透過的にします。
;; 入力は mbstring.http_input -> mbstring.internal_encoding へ
;; 出力は mbstring.internal_encoding -> mbstring.http_output へ
mbstring.encoding_translation = On
;; スクリプトとデータベースもこれに合わせるのを忘れずに。
mbstring.internal_encoding = UTF-8
;; デフォルトのHTTP入力文字エンコーディングを設定
mbstring.http_input = UTF-8,SJIS-win,eucJP-win
;; 内部エンコーディングのまま出力。
;; DoCoMo, AU は mb_http_output('SJIS-win') する
mbstring.http_output = pass
;; エンコーディング検出の順番
mbstring.detect_order = UTF-8,SJIS-win,eucJP-win
これが正解ではないだろうけど、こんな感じがよいだろうという思いです。
こうした方がいいというのがあったら教えていただけると幸いです。
ちなみに PC 一本で行くなら、
文字コードに起因する脆弱性を防ぐ「やや安全な」php.ini設定
の記事を参照してください。