概要
PHPでサポートされている文字エンコーディングについてまとめていこうと思います。
※PHP8.2時点での仕様となります。
サポートされる文字エンコーディングについて
サポートされる文字エンコーディング で一覧を確認できますが、エイリアスも存在するためマニュアルでは一覧で確認することができないです。
下記の関数を組み合わせると一覧を確認することができます。
非推奨となった文字エンコーディング
PHP8.2以降では「QPrint
, Base64
, Uuencode
, HTML-ENTITIES
」が 非推奨となりました。
サポートされる文字エンコーディングの一覧を返す関数であるmb_list_encodings は、PHP8.2時点では前述の非推奨となった文字エンコーディングを返すので、他の関数の引数として利用する場合は除外するなどの対応が必要となります。
非推奨となった文字エンコーディングについての詳細については下記を参考にしてください。
文字エンコーディングのエイリアス
PHPではサポートされる文字エンコーディング で記載されている文字エンコーディングについて、エイリアスが設定されています。
各文字エンコーディングのエイリアスについては、mb_encoding_aliases で確認することができ、サポートされる文字エンコーディングを渡したときにそのエイリアスとなる文字エンコーディングのリストを返します。
例)
sjis
の場合は、x-sjis
とSHIFT-JIS
がエイリアスとなる。
サポートされる文字エンコーディング一覧
mb_list_encodings
とmb_encoding_aliases
を組み合わせることで利用できる文字エンコーディング一覧を作成することができます。
function getSupportedEncodings() {
return
array_map(
'strtolower',
array_unique(
array_merge(
$enc = array_diff(mb_list_encodings(), ['BASE64', 'UUENCODE', 'HTML-ENTITIES', 'Quoted-Printable']),
call_user_func_array(
'array_merge',
array_map(
"mb_encoding_aliases",
$enc
)
)
)
)
);
}
下記から抜粋
上記以外のサポートされている文字エンコーディング表記
前述の一覧以外に、サポートされるエンコーディングの概要にあるIANA文字セット登録名が実際には利用できます。
shift_jis
などがそれにあたり、前述の一覧には含まれないですが他のマルチバイト関数の引数として利用することができます。(※shift_jis
は、sjis
と完全に同じ挙動となります。)
そのため、PHPで利用できる文字エンコーディングのチェックとして利用する場合は、mb_list_encodings
とmb_encoding_aliases
だけでは確認できないため、別途実装する必要があります。
まとめ
PHPでサポートされている文字エンコーディングについて、PHP内で確認する方法などを紹介しました。
メールのデータをPHPで扱う際に、mimeタイプにあるcharsetを利用して変換しようとし際にどうやったら判定できるか調べた際の内容になります。
PHPで利用できる文字エンコーディングかを判定させたいときなどに参考していただければ幸いです。