| | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
LXXXVII. マルチバイト文字列関数(mbstring)導入全ての文字をシングルバイトで一対一表現可能な言語は数多くありますが、 文字表現に単一バイトによる表現範囲を越えるほど多くの文字を必要とする 言語も多くあります。マルチバイト文字のエンコーディング法は、 こうした(256を越える)多くの文字を通常のビット単位の符号化システムで表現するために 開発されました。 マルチバイトエンコーディングで符号化された文字列を(trim, split, splice,などで) 処理する際、こうしたエンコーディングでは二つ以上の連続するバイトが一つの文字を表す 可能性があるため、特別な関数を使用する必要があります。 マルチバイトに対応しない文字列関数を文字列に適用した場合、マルチバイト文字の 先頭バイトまたは終了バイトを検出できずに文字列を壊し、多くの場合には元の意味を 失わせてしまう可能性があります。 mbstringは、これらのマルチバイト対応関数を 提供し、マルチバイトエンコーディング、シングルバイトエンコーディングの処理を 基本的に前提とするPHPで処理することを容易にします。 これに加えて、mbstring は、複数のエンコーディング間での 文字エンコーディング変換を行います。 mbstringは、もともと日本語のWebページで使用する ために開発されましたが、Shift_JISやUCS-2のようなUnicodeに基づく エンコーディングや多くの(以下に示す)シングルバイトエンコーディングも処理する ことが可能です。 PHPの文字エンコーディングに関する要件以下の型のエンコーディングが、PHPで安全に使用することができます。
PHPで動作しないと思われる文字エンコーディングの例を以下に示します。 これらのエンコーディングで書かれたPHPスクリプトは、 特に符号化された文字列がスクリプトで記述子やリテラルに使用される場合には、 動作しない可能性がありますが、入力されるHTTPクエリに関して mbstringの透過的なエンコーディングフィルタを 設定することでこれらのエンコーディングをほとんど使用しないようにすることが できます。
インストール手順mbstring は拡張モジュールです。つまり、デフォルトでは 有効にならないということです。 configure スクリプトでモジュールを有効にする必要が あります。詳細は、インストールの 節を参照してください。 mbstring モジュールに関係する設定オプションは 以下のとおりです。
実行時設定php.ini の設定により動作が変化します。
表 1. mbstring 設定オプション
以下に設定ディレクティブに関する 簡単な説明を示します。
HTML 4.01の規約 によると、Web ブラウザは、 フォームのデータを投稿する際にページで使用される文字エンコーディングと 異なるエンコーディングを使用することができます。 ブラウザで使用される文字エンコーディングを検出するには、 mb_http_input() を参照ください。 一般的に使用されるブラウザでは、 指定したHTML文書の文字エンコーディングをかなり正確に推定することができますが、 header() または設定パラメータ default_charset により、 Content-Type HTTP ヘッダで charset を設定する方がより良いでしょう。
リソース型リソース型は定義されていません。 定義済み定数以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。 HTTP入出力HTTP 入出力の文字エンコーディング変換はバイナリデータも変換して しまいます。HTTP入出力にバイナリデータが使用される場合、ユーザは、 文字エンコーディング変換を制御する必要があります。
サポートされる文字エンコーディング現在、以下の文字エンコーディングがmbstringモ ジュールによりサポートされています。文字エンコーディングは、 mbstring関数のencodingパラ メータで指定することが可能です。 以下の文字エンコーディングがこのPHPエクステンションでサポートされ ています。
php.iniのエントリではエンコーディング名を指定可能ですが、 "auto" および "pass" も指定可能です。 mbstring 関数には、エンコーディング名と "auto" を指定可能です。 "pass" が指定された場合、文字エンコー ディング変換は行われません。 "auto" が指定された場合、この文字列 は、"ASCII,JIS,Shift_JIS,EUC-JP,SJIS"に 変換されます。 mb_detect_order()も参照ください。 マルチバイト対応版関数による既存関数のオーバーロードPHPアプリケーションの多くは、英語等のシングルバイトの言語用に設計 されており、日本語を含むマルチバイト文字列を扱う場合には問題を生 じる場合があります。substr()等のPHPの文字列関 数の多くはマルチバイト文字列に対応していません。 マルチバイト拡張モジュール(mbstring)では、文字列を処理するPHP関数 のマルチバイト対応版(例えば、substr()の場合は mb_substr())をサポートしています。 マルチバイト拡張モジュール(mbstring)では、PHP 4.2.0以降で既存の PHP関数を対応するマルチバイト文字対応版の関数でオーバーロードする 機能をサポートします。関数のオーバーロードを行うと、例えば substr()をPHPスクリプトでコールした場合に、 mb_substr()が代わりにコールされるようになりま す。これにより、マルチバイト文字に対応しないアプリケーションの移 植が容易となります。 関数オーバーロードを使用するには、設定ファイル php.iniの mbstring.func_overloadディレクティブに0以外の 値を設定します。設定値によりオーバーロードされる関数の種類が異な ります。メール関数の場合は1、文字列関数は2、正規表現関数は4を使用 します。論理和をとることにより複数の値を指定可能です。例えば、7を 指定すると全てのメール、文字列、正規表現関数をオーバーロードしま す。オーバーロードされる関数を下表に示します。 表 2. オーバーロードされる関数
日本語のマルチバイト文字に関する基本事項多くの日本語の文字は1文字あたり複数のバイトを必要とします。加え て、日本語の環境では複数の文字エンコーディング手法が使用されてい ます。使用されているのは、EUC-JP、Shift_JIS(SJIS)、 ISO-2022-JP(JIS) 文字エンコーディングです。Unicodeが普及しつつあ り、Shift_JIS も使用されています。日本語環境のWebアプリケーションを 開発するためには、HTTP入出力、RDBMS、e-mailの処理においてそれぞ れに適した文字集合を使用することが重要となります。
リファレンスマルチバイト文字エンコーディングと関連する問題は非常に複雑です。 ここで詳細について記述することは不可能です。詳細な事項については、 以下のURLおよび他のリソースを参照ください。
サポートされるエンコーディングの概要サポートされるエンコーディングの概要 IANA文字セット登録名: ISO-10646-UCS-4 依存する文字集合: ISO 10646 説明: The Universal Character Set with 31-bit code space, standardized as UCS-4 by ISO/IEC 10646. It is kept synchronized with the latest version of the Unicode code map. 注記: If this name is used in the encoding conversion facility, the converter attempts to identify by the preceding BOM (byte order mark)in which endian the subsequent bytes are represented. IANA文字セット登録名: ISO-10646-UCS-4 依存する文字集合: UCS-4 説明: See above. 注記: In contrast to UCS-4, strings are always assumed to be in big endian form. IANA文字セット登録名: ISO-10646-UCS-4 依存する文字集合: UCS-4 説明: See above. 注記: In contrast to UCS-4, strings are always assumed to be in little endian form. IANA文字セット登録名: ISO-10646-UCS-2 依存する文字集合: UCS-2 説明: The Universal Character Set with 16-bit code space, standardized as UCS-2 by ISO/IEC 10646. It is kept synchronized with the latest version of the unicode code map. 注記: If this name is used in the encoding conversion facility, the converter attempts to identify by the preceding BOM (byte order mark)in which endian the subsequent bytes are represented. IANA文字セット登録名: ISO-10646-UCS-2 依存する文字集合: UCS-2 説明: See above. 注記: In contrast to UCS-2, strings are always assumed to be in big endian form. IANA文字セット登録名: ISO-10646-UCS-2 依存する文字集合: UCS-2 説明: See above. 注記: In contrast to UCS-2, strings are always assumed to be in little endian form. IANA文字セット登録名: UTF-32 依存する文字集合: Unicode 説明: Unicode Transformation Format of 32-bit unit width, whose encoding space refers to the Unicode's codeset standard. This encoding scheme wasn't identical to UCS-4 because the code space of Unicode were limited to a 21-bit value. 注記: If this name is used in the encoding conversion facility, the converter attempts to identify by the preceding BOM (byte order mark)in which endian the subsequent bytes are represented. IANA文字セット登録名: UTF-32BE 依存する文字集合: Unicode 説明: See above 注記: In contrast to UTF-32, strings are always assumed to be in big endian form. IANA文字セット登録名: UTF-32LE 依存する文字集合: Unicode 説明: See above 注記: In contrast to UTF-32, strings are always assumed to be in little endian form. IANA文字セット登録名: UTF-16 依存する文字集合: Unicode 説明: Unicode Transformation Format of 16-bit unit width. It's worth a note that UTF-16 is no longer the same specification as UCS-2 because the surrogate mechanism has been introduced since Unicode 2.0 and UTF-16 now refers to a 21-bit code space. 注記: If this name is used in the encoding conversion facility, the converter attempts to identify by the preceding BOM (byte order mark)in which endian the subsequent bytes are represented. IANA文字セット登録名: UTF-16BE 依存する文字集合: Unicode 説明: See above. 注記: In contrast to UTF-16, strings are always assumed to be in big endian form. IANA文字セット登録名: UTF-16BE 依存する文字集合: Unicode 説明: See above. 注記: In contrast to UTF-16, strings are always assumed to be in big endian form. IANA文字セット登録名: Shift_JIS 依存する文字集合: Unicode / UCS 説明: Unicode Transformation Format of 8-bit unit width. 注記: none IANA文字セット登録名: UTF-7 依存する文字集合: Unicode 説明: A mail-safe transformation format of Unicode, specified in RFC2152. 注記: none IANA文字セット登録名: (none) 依存する文字集合: Unicode 説明: A variant of UTF-7 which is specialized for use in the IMAP protocol. 注記: none IANA文字セット登録名: US-ASCII (preferred MIME name) / iso-ir-6 / ANSI_X3.4-1986 / ISO_646.irv:1991 / ASCII / ISO646-US / us / IBM367 / CP367 / csASCII 依存する文字集合: ASCII / ISO 646 説明: American Standard Code for Information Interchange is a commonly-used 7-bit encoding. Also standardized as an international standard, ISO 646. 注記: (none) IANA文字セット登録名: EUC-JP (preferred MIME name) / Extended_UNIX_Code_Packed_Format_for_Japanese / csEUCPkdFmtJapanese 依存する文字集合: Compound of US-ASCII / JIS X0201:1997 (hankaku kana part) / JIS X0208:1990 / JIS X0212:1990 説明: As you see the name is derived from an abbreviation of Extended UNIX Code Packed Format for Japanese, this encoding is mostly used on UNIX or alike platforms. The original encoding scheme, Extended UNIX Code, is designed on the basis of ISO 2022. 注記: The character set referred to by EUC-JP is different to IBM932 / CP932, which are used by OS/2〓 and Microsoft〓 Windows〓. For information interchange with those platforms, use EUCJP-WIN instead. IANA文字セット登録名: Shift_JIS (preferred MIME name) / MS_Kanji / csShift_JIS 依存する文字集合: Compound of JIS X0201:1997 / JIS X0208:1997 説明: Shift_JIS was developed in early 80's, at the time personal Japanese word processors were brought into the market, in order to maintain compatiblities with the legacy encoding scheme JIS X 0201:1976. According to the IANA definition the codeset of Shift_JIS is slightly different to IBM932 / CP932. However, the names "SJIS" / "Shift_JIS" are often wrongly used to refer to these codesets. 注記: For the CP932 codemap, use SJIS-WIN instead. IANA文字セット登録名: (none) 依存する文字集合: Compound of JIS X0201:1997 / JIS X0208:1997 / IBM extensions / NEC extensions 説明: While this "encoding" uses the same encoding scheme as EUC-JP, the underlying character set is different. That is, some code points map to different characters than EUC-JP. 注記: none IANA文字セット登録名: Windows-31J / csWindows31J 依存する文字集合: Compound of JIS X0201:1997 / JIS X0208:1997 / IBM extensions / NEC extensions 説明: While this "encoding" uses the same encoding scheme as Shift_JIS, the underlying character set is different. That means some code points map to different characters than Shift_JIS. 注記: (none) IANA文字セット登録名: ISO-2022-JP (preferred MIME name) / csISO2022JP 依存する文字集合: US-ASCII / JIS X0201:1976 / JIS X0208:1978 / JIS X0208:1983 説明: RFC1468 注記: (none) IANA文字セット登録名: JIS 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-1 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-2 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-3 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-4 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-5 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-6 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-7 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-8 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-9 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-10 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-13 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-14 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-8859-15 依存する文字集合: 説明: 注記: IANA文字セット登録名: byte2be 依存する文字集合: 説明: 注記: IANA文字セット登録名: byte2le 依存する文字集合: 説明: 注記: IANA文字セット登録名: byte4be 依存する文字集合: 説明: 注記: IANA文字セット登録名: byte4le 依存する文字集合: 説明: 注記: IANA文字セット登録名: BASE64 依存する文字集合: 説明: 注記: IANA文字セット登録名: HTML-ENTITIES 依存する文字集合: 説明: 注記: IANA文字セット登録名: 7bit 依存する文字集合: 説明: 注記: IANA文字セット登録名: 8bit 依存する文字集合: 説明: 注記: IANA文字セット登録名: EUC-CN 依存する文字集合: 説明: 注記: IANA文字セット登録名: CP936 依存する文字集合: 説明: 注記: IANA文字セット登録名: HZ 依存する文字集合: 説明: 注記: IANA文字セット登録名: EUC-TW 依存する文字集合: 説明: 注記: IANA文字セット登録名: CP950 依存する文字集合: 説明: 注記: IANA文字セット登録名: BIG-5 依存する文字集合: 説明: 注記: IANA文字セット登録名: EUC-KR 依存する文字集合: 説明: 注記: IANA文字セット登録名: UHC (CP949) 依存する文字集合: 説明: 注記: IANA文字セット登録名: ISO-2022-KR 依存する文字集合: 説明: 注記: IANA文字セット登録名: Windows-1251 (CP1251) 依存する文字集合: 説明: 注記: IANA文字セット登録名: Windows-1252 (CP1252) 依存する文字集合: 説明: 注記: IANA文字セット登録名: CP866 (IBM866) 依存する文字集合: 説明: 注記: IANA文字セット登録名: KOI8-R 依存する文字集合: 説明: 注記:
|
|
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「マルチバイト文字列関数(mbstring)」をGoogle検索
|