2018年10月25日

PHPの各バージョンでサポートされるエンコーディング

前の記事で ISO-2022-JP-MS が PHP 5.2.1 からサポートされたと書いたが、PHP の Release Announce にも Changelog にも記載がなく信用できる出典も見つからず、結局自分で調べ上げたので書き残しておく。

バージョンごとにサポートされる文字エンコーディング

マルチバイト関数が受け付けるエンコーディングを、追加されたバージョンと一緒にリストにした。
エイリアスはリストアップしていない。逆に一部 サポートされる文字エンコーディング に掲載されていないエンコーディングがある。

5.4.0

  • EUC-JP-2004
  • SJIS-Mobile#DOCOMO
  • SJIS-Mobile#KDDI
  • SJIS-Mobile#SOFTBANK
  • SJIS-mac
  • SJIS-2004
  • UTF-8-Mobile#DOCOMO
  • UTF-8-Mobile#KDDI-A
  • UTF-8-Mobile#KDDI-B
  • UTF-8-Mobile#SOFTBANK
  • GB18030
  • CP950
  • ISO-2022-JP-2004
  • ISO-2022-JP-MOBILE#KDDI

5.3.3

  • CP932
  • JIS-ms
  • CP50220
  • CP50220raw
  • CP50221
  • CP50222

5.3.0

  • Windows-1254
  • KOI8-U
  • CP850

5.2.1

  • CP51932
  • ISO-2022-JP-MS

5.1.0

  • ArmSCII-8

5.0.4

  • ISO-8859-16

5.0.0

  • pass
  • auto
  • wchar
  • byte2be
  • byte2le
  • byte4be
  • byte4le
  • BASE64
  • UUENCODE
  • HTML-ENTITIES
  • Quoted-Printable
  • 7bit
  • 8bit
  • UCS-4
  • UCS-4BE
  • UCS-4LE
  • UCS-2
  • UCS-2BE
  • UCS-2LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-8
  • UTF-7
  • UTF7-IMAP
  • ASCII
  • EUC-JP
  • SJIS
  • eucJP-win
  • SJIS-win
  • JIS
  • ISO-2022-JP
  • Windows-1252
  • ISO-8859-1
  • ISO-8859-2
  • ISO-8859-3
  • ISO-8859-4
  • ISO-8859-5
  • ISO-8859-6
  • ISO-8859-7
  • ISO-8859-8
  • ISO-8859-9
  • ISO-8859-10
  • ISO-8859-13
  • ISO-8859-14
  • ISO-8859-15
  • EUC-CN
  • CP936
  • HZ
  • EUC-TW
  • BIG-5
  • EUC-KR
  • UHC
  • ISO-2022-KR
  • Windows-1251
  • CP866
  • KOI8-R

検証方法

  1. 各バージョンの PHP を実行できるサイトを探す。今回は 3v4l.org
  2. mb_list_encodings をできる限りすべてのバージョンで実行する。
  3. 出力を保存して適当に差分を取る。

<?php
# https://3v4l.org/
# if ( function_exists( "mb_list_encodings" )) echo join(mb_list_encodings(), "\n");

$versions = [];
$data = array();
$i = -1;

define("HEADER", "Output for " );

$lines = file( "php-mb.list", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES );
foreach( $lines as $line ) {
  $line = trim($line);
  if ( strpos( $line, HEADER ) === 0 ) {
    $i += 1;

    $version = substr($line, strlen(HEADER));
    array_push($versions, $version);
    $data[$i] = array();
  } else if ( ! empty($line) ) {
    array_push($data[$i], $line);
  }
}

for( $i = 0; $i < count($data) - 1; $i++ ) {
  $diff = array_diff( $data[$i], $data[$i+1] );
  if ( !empty($diff) ) {
    print( "### ".$versions[$i].PHP_EOL.PHP_EOL );
    foreach ( $diff as $d ) {
      print( "- ".$d.PHP_EOL );
    }
    print( PHP_EOL );
  }
}
posted by かぷらす at 23:32| Comment(0) | 調査 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください