[PHP-dev 1356] PHP 5.2.0 以前と PHP 5.2.1RC1 以降で発生する一部の文字コード変換の非互換について

komura komura @ ma9.seikyou.ne.jp
2007年 1月 20日 (土) 03:44:31 JST


komura です。

最近になってから、一部の文字では、文字コード変換を行うと、PHP 5.2.0 以前
と違いがあることに気がつきました。

以下に例を挙げましたが、これは意図された変更なのでしょうか?

 # "〜"(EUC-JP:0xA1C1, SJIS:0x8160) を UTF-16 に変換

 $ php-5.2.0    -r 'echo bin2hex( mb_convert_encoding( "\xA1\xC1", "UTF-16", "EUC-JP" ) );'
 301c

 $ php-5.2.1RC3 -r 'echo bin2hex( mb_convert_encoding( "\xA1\xC1", "UTF-16", "EUC-JP" ) );'
 ff5e

 $ php-5.2.0    -r 'echo bin2hex( mb_convert_encoding( "\x81\x60", "UTF-16", "SJIS" ) );'
 301c

 $ php-5.2.1RC3 -r 'echo bin2hex( mb_convert_encoding( "\x81\x60", "UTF-16", "SJIS" ) );'
 ff5e

この例で挙げた "〜" は EUC-JP や SJIS の場合、WAVE DASH(U+301C) に変換する
PHP 5.2.0 以前の方が(調べた限りでは)一般的だと思うのですが、PHP 5.2.1RC1
以降では、FULLWIDTH TILDE(U+FF5E) に変換されています。

この変更は、「[PHP-dev 1345] PHP への CP932 系エンコーディングの追加パッチ」
が適用されてから発生しています。

少し調べてみたのですが、ext/mbstring/libmbfl/filters/unicode_table_jis.h
で定義されている変換テーブルの変更が影響しているようです。

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-dev メーリングリストの案内