7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラクスAdvent Calendar 2023

Day 13

PHPでサポートされている文字エンコーディングについて

Last updated at Posted at 2023-12-12

概要

PHPでサポートされている文字エンコーディングについてまとめていこうと思います。

※PHP8.2時点での仕様となります。

サポートされる文字エンコーディングについて

サポートされる文字エンコーディング で一覧を確認できますが、エイリアスも存在するためマニュアルでは一覧で確認することができないです。

下記の関数を組み合わせると一覧を確認することができます。

非推奨となった文字エンコーディング

PHP8.2以降では「QPrint, Base64, Uuencode, HTML-ENTITIES」が 非推奨となりました。
サポートされる文字エンコーディングの一覧を返す関数であるmb_list_encodings は、PHP8.2時点では前述の非推奨となった文字エンコーディングを返すので、他の関数の引数として利用する場合は除外するなどの対応が必要となります。

非推奨となった文字エンコーディングについての詳細については下記を参考にしてください。

文字エンコーディングのエイリアス

PHPではサポートされる文字エンコーディング で記載されている文字エンコーディングについて、エイリアスが設定されています。

各文字エンコーディングのエイリアスについては、mb_encoding_aliases で確認することができ、サポートされる文字エンコーディングを渡したときにそのエイリアスとなる文字エンコーディングのリストを返します。

例)sjisの場合は、x-sjisSHIFT-JISがエイリアスとなる。

サポートされる文字エンコーディング一覧

mb_list_encodingsmb_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_encodingsmb_encoding_aliasesだけでは確認できないため、別途実装する必要があります。

まとめ

PHPでサポートされている文字エンコーディングについて、PHP内で確認する方法などを紹介しました。
メールのデータをPHPで扱う際に、mimeタイプにあるcharsetを利用して変換しようとし際にどうやったら判定できるか調べた際の内容になります。

PHPで利用できる文字エンコーディングかを判定させたいときなどに参考していただければ幸いです。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?