ホームページ >バックエンド開発 >PHPチュートリアル >PHP文字列エンコーディング変換iconvとmb_convert_encodingの違い
PHP 文字列エンコード関数 mb_detect_encoding の概要
iconv — 文字列を要求された文字エンコーディングに変換します(PHP 4 >= 4.0.5、PHP 5)
mb_convert_encoding — 文字エンコーディングを変換する(PHP 4 >= 4.0.6, PHP 5)
iconv — 必要な文字エンコーディングに従って文字列を変換します
mb_convert_encoding — 文字エンコーディングを変換する
これら 2 つの関数は同様の機能を持ち、文字列エンコーディングを変換するために使用されます。
注: まず mbstring 拡張ライブラリを有効にし、php.ini
の extension=php_mbstring.dll の前にある ; を削除する必要があります。
パラメータ: str - エンコードする str、to_encoding - エンコード タイプに変換する str、from_encoding - 変換前の文字コード名で指定します。 配列またはカンマ区切りの列挙リストを指定できます。 from_encoding が指定されていない場合は、内部エンコーディングが使用されます。 サポートされているエンコーディングを参照してください。
サポートされている文字エンコーディング
現在、mbstring モジュールは次の文字エンコーディングをサポートしています。これらの文字エンコーディングはいずれも、mbstring 関数のエンコーディング パラメーターとして指定できます。
この PHP 拡張機能でサポートされている文字エンコーディングは次のとおりです:
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-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
ISO-2022-JP
ISO-2022-JP-MS
CP932
CP51932
SJIS-mac** (別名: MacJapanese)
SJIS-Mobile#DOCOMO** (別名: SJIS-DOCOMO)
SJIS-Mobile#KDDI** (別名: SJIS-KDDI)
SJIS-Mobile#ソフトバンク** (別名: SJIS-ソフトバンク)
UTF-8-Mobile#DOCOMO** (別名: UTF-8-DOCOMO)
UTF-8-Mobile#KDDI-A**
UTF-8-Mobile#KDDI-B** (別名: UTF-8-KDDI)
UTF-8-Mobile#SOFTBANK** (エイリアス: UTF-8-SOFTBANK)
ISO-2022-JP-MOBILE#KDDI** (別名: ISO-2022-JP-KDDI)
JIS
JIS-ms
CP50220
CP50220生
CP50221
CP50222
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*
byte2be
byte2le
byte4be
byte4le
BASE64
HTML エンティティ
7ビット
8ビット
EUC-CN*
CP936
GB18030**
ヘルツ
EUC-TW*
CP950
BIG-5*
EUC-KR*
UHC (CP949)
ISO-2022-KR
Windows-1251 (CP1251)
Windows-1252 (CP1252)
CP866 (IBM866)
KOI8-R*
* は、エンコーディングが正規表現でも使用できることを示します。
** は、このエンコーディングが PHP 5.4.0 以降で利用できることを示します。
エンコードされた名前を受け入れる php.ini エントリでは、「auto」値と「pass」値も使用できます。 エンコーディング名を受け入れる mbstring 関数でも、値「auto」を使用できます。
「pass」を設定した場合、文字コードは変換されません。
「auto」が設定されている場合、NLS で定義されているすべての文字エンコーディング リストに拡張されます。 たとえば、NLS が日本語に設定されているとすると、値は「ASCII,JIS,UTF-8,EUC-JP,SJIS」とみなされます。
NLS: 各国語サポート
注:
2 番目のパラメーターは、変換先のエンコーディングの指定に加えて、//TRANSLIT と //IGNORE、
の 2 つの接尾辞を追加することもできます。
その中には:
//TRANSLIT は、直接変換できない文字を 1 つ以上の近似文字
に自動的に変換します。
//IGNORE は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。
変換された文字列を返すか、失敗した場合は FALSE を返します (変換された文字列を返します。実行が失敗した場合は FALSE を返します)。
使用:
1. iconv が文字「-」を gb2312 に変換するときにエラーが発生することがわかりました。ignore パラメータを指定しないと、この文字に続くすべての文字列を保存できません。この「-」はどうやってもうまく変換できず出力できません。 なお、mb_convert_encoding にはこのバグはありません。
2. mb_convert_encoding は複数の入力エンコーディングを指定でき、内容に基づいて自動的に識別されますが、実行効率は次のような iconv よりもはるかに悪くなります。
$str = mb_convert_encoding($str,"euc-jp","ASCII,JIS,EUC-JP,SJIS,UTF-8");「ASCII,JIS,EUC-JP,SJIS,UTF-8」の順序は異なる効果もあります。
3. 通常の状況では、iconv を使用します。mb_convert_encoding 関数は、元のエンコーディングが特定できない場合、または変換後に iconv が正常に表示されない場合にのみ使用してください。
from_encodingは変換前の文字コード名で指定します。配列またはカンマ区切りの文字列
で指定できます。
列挙型リストが指定されていない場合は、内部エンコーディングが使用されます。
$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");
$str = mb_convert_encoding($str, "EUC-JP', " auto");
例:
$content = iconv("GBK", "UTF-8", $content);
$content = mb_convert_encoding($content, "UTF-8", "GBK");
/* 转换内部编码为 SJIS */ $str = mb_convert_encoding($str, "SJIS"); /* 将 EUC-JP 转换成 UTF-7 */ $str = mb_convert_encoding($str, "UTF-7", "EUC-JP"); /* 从 JIS, eucjp-win, sjis-win 中自动检测编码,并转换 str 到 UCS-2LE */ $str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win"); /* "auto" 扩展成 "ASCII,JIS,UTF-8,EUC-JP,SJIS" */ $str = mb_convert_encoding($str, "EUC-JP", "auto");
$text = "This is the Euro symbol '€'."; echo 'Original : ', $text, PHP_EOL; echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; 输出结果: Original : This is the Euro symbol '€'. TRANSLIT : This is the Euro symbol 'EUR'. IGNORE : This is the Euro symbol ''. Plain : Notice: iconv(): Detected an illegal character in input string in .\iconv-example.php on line 7 This is the Euro symbol '