|
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7">LIIマルチバイト文字列関数(mbstring)導入全ての文字をシングルバイトで表現可能な言語は数多くあります。マル チバイト文字コードは、多くの言語で文字を表すために使用されていま す。mbstring は日本語文字を処理するために開発 されました。しかし、mbstring 関数の多くは、日 本語以外の文字エンコーディングも処理することが可能です。 マルチバイト文字エンコーディングは、バイトの並びで単一の文字を表 現します。いくつかの文字エンコーディングでは、マルチバイト文字列 の始まり/終わりを表すためにシフト(エスケープ)シーケンスが使用され ています。この場合、マルチバイト文字エンコーディングに対応した方 法でない限り、分割または追加されるとマルチバイト文字列は壊れてし まう可能性があります。このモジュールは、マルチバイト文字列に対応 した文字列関数および変換関数のようなその他のユーティリティ関数を 提供します。 PHPは、基本的にISO-8859-1用に設計されているため、いくつかのマルチ バイト文字エンコーディングは、PHPで正常に動作しません。このため、 mbstring.internal_encoding にPHPで動作する文字 エンコーディングを設定することが必要です。 PHP4の文字エンコーディングに関する規約
PHPの内部エンコーディングとして使用可能な文字エンコーディングと 使用できない文字エンコーディングの例を以下に示します。 PHPの内部エンコーディングとして使用できない文字エンコーディングは、 mbstringのHTTP入力/出力変換の機能/関数により変換 することが可能です。
インストール手順mbstring は拡張モジュールです。 configureスクリプトでモジュールを有効にする必 要があります。詳細については、インストールの節を参照下さい。 以下のconfigureオプションがmbstringモジュール に関係するものです。
実行用の設定これらの関数の動作は、php.iniの設定により変化します。
表 1Multi-Byte String 設定オプション
以下に設定ディレクティブの簡単な説明を書きます。
Webブラウザは、フォームのデータを投稿する際に同じ文字エンコーディ ングを使用すると仮定されます。しかし、ブラウザは同じ文字エンコー ディングを使用しない可能性があります。ブラウザで使用される文字エ ンコーディングを検出するには、mb_http_input() を参照下さい。 HTMLフォームでenctype が multipart/form-data に設定された場合、 mbstringはPOSTデータの文字エンコーディングを 変換しません。ユーザは、変換に応じてスクリプト内で変換を行う必要 があります。 しかし、ブラウザ側でもHTML内の文字エンコーディングを検出すること は可能です。HTMLヘッダでcharsetを設定する方が より良いでしょう。文字エンコーディングに応じて default_charsetを変更して下さい。
HTTP入出力HTTP 入出力の文字エンコーディング変換はバイナリデータも変換して しまいます。HTTP入出力にバイナリデータが使用される場合、ユーザは、 文字エンコーディング変換を制御する必要があります。 HTMLフォームのenctypeが multipart/form-dataに設定された場合、 mbstring は、POSTデータの文字エンコーディング を変換しません。この場合、文字列を内部文字エンコーディングに変換 してやる必要があります。
サポートされる文字エンコーディング現在、以下の文字エンコーディングがmbstringモ ジュールによりサポートされています。文字エンコーディングは、 mbstring関数のencodingパラ メータで指定することが可能です。 以下の文字エンコーディングがこのPHP拡張モジュールでサポートされ ています。 UCS-4, UCS-4BE, UCS-4LE, UCS-2, UCS-2BE, UCS-2LE, UTF-32, UTF-32BE, UTF-32LE, UCS-2LE, UTF-16, UTF-16BE, UTF-16LE, UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win, ISO-2022-JP, JIS, 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, 7bit, 8bit, UTF7-IMAP PHP 4.3.0以降、以下の文字エンコーディングのサポートが実験的に 行なわれます。 EUC-CN, CP936, HZ, EUC-TW, CP950, BIG-5, EUC-KR, UHC (CP949), ISO-2022-KR, Windows-1251 (CP1251), Windows-1252 (CP1252), CP866, KOI8-R. エンコーディング名を指定可能なphp.ini のエン トリでは、"auto" および "pass" も指定可能です。 mbstring 関数には、エンコーディング名と "auto" を指定可能です。 "pass" が指定された場合、文字エンコー ディング変換は行われません。 "auto" が指定された場合、この文字列 は、"ASCII,JIS,UTF-8,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が普及しつつあ り、UTF-8 も使用されています。日本語環境のWebアプリケーションを 開発するためには、HTTP入出力、RDBMS、e-mailの処理においてそれぞ れに適した文字集合を使用することが重要となります。
|