å°Žå…¥
å…¨ã¦ã®æ–‡å—をシングルãƒã‚¤ãƒˆã§è¡¨ç¾å¯èƒ½ãªè¨€èªžã¯æ•°å¤šãã‚りã¾ã™ã€‚マル
ãƒãƒã‚¤ãƒˆæ–‡å—コードã¯ã€å¤šãã®è¨€èªžã§æ–‡å—を表ã™ãŸã‚ã«ä½¿ç”¨ã•れã¦ã„ã¾
ã™ã€‚mbstring ã¯æ—¥æœ¬èªžæ–‡å—を処ç†ã™ã‚‹ãŸã‚ã«é–‹ç™º
ã•れã¾ã—ãŸã€‚ã—ã‹ã—ã€mbstring 関数ã®å¤šãã¯ã€æ—¥
æœ¬èªžä»¥å¤–ã®æ–‡å—エンコーディングも処ç†ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
マルãƒãƒã‚¤ãƒˆæ–‡å—エンコーディングã¯ã€ãƒã‚¤ãƒˆã®ä¸¦ã³ã§å˜ä¸€ã®æ–‡å—を表
ç¾ã—ã¾ã™ã€‚ã„ãã¤ã‹ã®æ–‡å—エンコーディングã§ã¯ã€ãƒžãƒ«ãƒãƒã‚¤ãƒˆæ–‡å—列
ã®å§‹ã¾ã‚Š/終ã‚りを表ã™ãŸã‚ã«ã‚·ãƒ•ト(エスケープ)シーケンスãŒä½¿ç”¨ã•れ
ã¦ã„ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒžãƒ«ãƒãƒã‚¤ãƒˆæ–‡å—エンコーディングã«å¯¾å¿œã—ãŸæ–¹
法ã§ãªã„é™ã‚Šã€åˆ†å‰²ã¾ãŸã¯è¿½åŠ ã•れるã¨ãƒžãƒ«ãƒãƒã‚¤ãƒˆæ–‡å—列ã¯å£Šã‚Œã¦ã—
ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ãƒžãƒ«ãƒãƒã‚¤ãƒˆæ–‡å—列ã«å¯¾å¿œ
ã—ãŸæ–‡å—列関数ãŠã‚ˆã³å¤‰æ›é–¢æ•°ã®ã‚ˆã†ãªãã®ä»–ã®ãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£é–¢æ•°ã‚’
æä¾›ã—ã¾ã™ã€‚
PHPã¯ã€åŸºæœ¬çš„ã«ISO-8859-1用ã«è¨è¨ˆã•れã¦ã„ã‚‹ãŸã‚ã€ã„ãã¤ã‹ã®ãƒžãƒ«ãƒ
ãƒã‚¤ãƒˆæ–‡å—エンコーディングã¯ã€PHPã§æ£å¸¸ã«å‹•作ã—ã¾ã›ã‚“。ã“ã®ãŸã‚ã€
mbstring.internal_encoding ã«PHPã§å‹•作ã™ã‚‹æ–‡å—
エンコーディングをè¨å®šã™ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚
PHP4ã®æ–‡å—エンコーディングã«é–¢ã™ã‚‹è¦ç´„
ãƒã‚¤ãƒˆæ¯Žã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã§ã‚る。
シングルãƒã‚¤ãƒˆæ–‡å—ã¯ã€ASCII互æ›ã®
00h-7fhã®ç¯„囲ã«ã‚る。
マルãƒãƒã‚¤ãƒˆæ–‡å—ã¯ã€00h-7fh以外を使用ã™ã‚‹ã€‚
PHPã®å†…部エンコーディングã¨ã—ã¦ä½¿ç”¨å¯èƒ½ãªæ–‡å—エンコーディングã¨
使用ã§ããªã„æ–‡å—エンコーディングã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚
PHPã®å†…部エンコーディングã¨ã—ã¦ä½¿ç”¨ã§ããªã„æ–‡å—エンコーディングã¯ã€
mbstringã®HTTP入力/出力変æ›ã®æ©Ÿèƒ½/関数ã«ã‚ˆã‚Šå¤‰æ›
ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
注æ„
SJIS ã¯ã€èªè€…ãŒãƒ‘ーサ/ã‚³ãƒ³ãƒ‘ã‚¤ãƒ©ã€æ–‡å—ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã¨æ–‡å—エン
コーディングã®å•題点ã«ã¤ã„ã¦ç²¾é€šã—ã¦ã„ãªã„é™ã‚Šå†…部エンコーディン
ã‚°ã¨ã—ã¦ä½¿ç”¨ã™ã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。
注æ„
PHPã§ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’使用ã™ã‚‹å ´åˆã€æ€§èƒ½ã‚’å‘上ã•ã›ã‚‹ãŸã‚ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼
スã¨PHPã®å†…部エンコーディングã«ã¤ã„ã¦åŒã˜æ–‡å—エンコーディングを使用
ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚
PostgreSQLを使用ã—ã¦ã„ã‚‹å ´åˆã€ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®æ–‡å—エンコーディング
ã¨ç•°ãªã‚‹æ–‡å—エンコーディングを使用ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚詳細ã«ã¤ã„
ã¦ã¯ã€PostgreSQLã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚照下ã•ã„。
ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«æ‰‹é †
mbstring ã¯æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã™ã€‚
configureスクリプトã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’有効ã«ã™ã‚‹å¿…
è¦ãŒã‚りã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®ç¯€ã‚’å‚照下ã•ã„。
以下ã®configureオプションãŒmbstringモジュール
ã«é–¢ä¿‚ã™ã‚‹ã‚‚ã®ã§ã™ã€‚
--enable-mbstring :
mbstring 関数を有効ã«ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ショ
ンã¯ã€mbstring 関数を利用ã™ã‚‹ãŸã‚ã«å¿…è¦ã§
ã™ã€‚
注æ„
PHP 4.3.0以é™ã€ã‚ªãƒ—ション
--enable-mbstring
ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æœ‰åйã¨ãªã‚Šã€ä¸å›½èªžã€éŸ“国語ã€ãƒã‚·ã‚¢èªžã‚’
サãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«
--with-mbstring[=LANG]
ã«å¤‰æ›´ã•れã¾ã™ã€‚
æ—¥æœ¬èªžã®æ–‡å—エンコーディングã¯ãƒ‡ãƒ•ォルトã§ã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
--with-mbstring=cnã‚’
使用ã—ãŸå ´åˆã€ç°¡ä½“å—ä¸å›½èªžã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
--with-mbstring=twã‚’
使用ã—ãŸå ´åˆã€ç¹ä½“å—ä¸å›½èªžã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
--with-mbstring=krã‚’
使用ã—ãŸå ´åˆã€éŸ“国語ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
--with-mbstring=ruã‚’
使用ã—ãŸå ´åˆã€ãƒã‚·ã‚¢èªžã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ãŒã‚µãƒãƒ¼ãƒˆã•れã¾ã™ã€‚
If --with-mbstring=all
ãŒæŒ‡å®šã•れãŸå ´åˆã€å…¨ã¦ã®ã‚µãƒãƒ¼ãƒˆã•れる文å—エンコーディングãŒ
有効ã¨ãªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€PHPã®ãƒã‚¤ãƒŠãƒªã‚µã‚¤ã‚ºã¯æœ€å¤§ã¨ãªã‚Šã¾ã™ã€‚
ã“れã¯ã€Unicodeæ–‡å—マップã®ã‚µã‚¤ã‚ºãŒå·¨å¤§ã§ã‚ã‚‹ãŸã‚ã§ã™ã€‚
ä¸å›½èªžã€éŸ“国語ã€ãƒã‚·ã‚¢èªžã®å®Ÿé¨“çš„ãªã‚µãƒãƒ¼ãƒˆã¯PHP 4.3.0ã§
è¿½åŠ ã•れãŸã“ã¨ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。
--enable-mbstr-enc-trans :
mbstring変æ›ã‚¨ãƒ³ã‚¸ãƒ³ã‚’使用ã—ãŸHTTPå…¥åŠ›ã®æ–‡
å—エンコーディング変æ›ã‚’有効ã«ã—ã¾ã™ã€‚ã“ã®æ©Ÿèƒ½ãŒæœ‰åйã®å ´åˆã€
HTTP入力文å—エンコーディングã¯ã€è‡ªå‹•çš„ã«
mbstring.internal_encodingã«å¤‰æ›ã•れã¾ã™ã€‚
注æ„
PHP 4.3.0以é™ã€ã“ã®ã‚ªãƒ—ション
--enable-mbstr-enc-trans
ã¯å»ƒæ¢ã•れã€mbstring.encoding_translation
ã«å¤‰æ›´ã¨ãªã‚Šã¾ã™ã€‚HTTP入力文å—エンコーディング変æ›ã¯ã€
ã“ã®ã‚ªãƒ—ションをOnã«è¨å®šã—ãŸå ´åˆã®ã¿
有効ã¨ãªã‚Šã¾ã™ã€‚
(デフォルトã¯ã€Offã§ã™ã€‚)
--enable-mbregex :
マルãƒãƒã‚¤ãƒˆå¯¾å¿œã®æ£è¦è¡¨ç¾é–¢æ•°ã‚’使用å¯èƒ½ã¨ã—ã¾ã™ã€‚
実行用ã®è¨å®š
ã“れらã®é–¢æ•°ã®å‹•作ã¯ã€php.iniã®è¨å®šã«ã‚ˆã‚Šå¤‰åŒ–ã—ã¾ã™ã€‚
表 1Multi-Byte String è¨å®šã‚ªãƒ—ション
åå‰ | デフォルト | 変更å¯èƒ½ãªç¯„囲 |
---|
mbstring.language | NULL | PHP_INI_ALL |
mbstring.detect_order | NULL | PHP_INI_ALL |
mbstring.http_input | NULL | PHP_INI_ALL |
mbstring.http_output | NULL | PHP_INI_ALL |
mbstring.internal_encoding | NULL | PHP_INI_ALL |
mbstring.script_encoding | NULL | PHP_INI_ALL |
mbstring.substitute_character | NULL | PHP_INI_ALL |
mbstring.func_overload | "0" | PHP_INI_SYSTEM |
mbstring.encoding_translation | "0" | PHP_INI_ALL |
PHP_INI_* 定数ã®è©³ç´°åŠã³å®šç¾©ã«ã¤ã„ã¦ã¯ã€
ini_set()
ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„。
以下ã«è¨å®šãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã®ç°¡å˜ãªèª¬æ˜Žã‚’書ãã¾ã™ã€‚
mbstring.language ã¯ã€mbstringã§ä½¿ç”¨ã•れる
言語ã®ãƒ‡ãƒ•ォルト値を定義ã—ã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションã¯ã€
mbstring.interanl_encoding
ã®ãƒ‡ãƒ•ォルト値を定義ã—ã€php.iniã«ãŠã„ã¦
mbstring.interanl_encodingã¯ã€
mbstring.languageã®å¾Œã«ç½®ãå¿…è¦ãŒã‚ã‚‹ã“ã¨ã«
注æ„ã—ã¦ä¸‹ã•ã„。
mbstring.encoding_translation ã¯ã€
HTTP入力文å—エンコーディング検出ãŠã‚ˆã³å†…部文å—エンコーディングã¸ã®å¤‰æ›
を有効ã«ã—ã¾ã™ã€‚
mbstring.internal_encoding ã¯å†…部文å—エン
コーディングã®ãƒ‡ãƒ•ォルト値を定義ã—ã¾ã™ã€‚
mbstring.http_input ã¯HTTP入力文å—エンコー
ディングã®ãƒ‡ãƒ•ォルト値を定義ã—ã¾ã™ã€‚
mbstring.http_output ã¯ã€HTTP出力文å—エン
コーディングã®ãƒ‡ãƒ•ォルト値を定義ã—ã¾ã™ã€‚
mbstring.detect_order ã¯ã€æ–‡å—コード検出ã®
デフォルト値を定義ã—ã¾ã™ã€‚
mb_detect_order()ã‚‚å‚照下ã•ã„。
mbstring.substitute_character ã¯ã€ç„¡åŠ¹ãªæ–‡
å—を代替ã™ã‚‹æ–‡å—を定義ã—ã¾ã™ã€‚
mbstring.func_overloadã¯ã€ã‚·ãƒ³ã‚°ãƒ«ãƒã‚¤ãƒˆå¯¾å¿œã®
関数をmbstring関数ã§ã‚ªãƒ¼ãƒãƒ¼ãƒãƒ¼ãƒ‰(ç½®æ›)ã—ã¾ã™ã€‚
mail(), ereg()ç‰ã¯ã€
mb_send_mail(), mb_ereg()ç‰ã§
ç½®æ›ã•れã¾ã™ã€‚使用å¯èƒ½ãªå€¤ã¯ã€0, 1, 2, 4 ãŠã‚ˆã³ã“れらã®ãƒ“ット和ã§ã™ã€‚
例ãˆã°ã€7 ã¯å…¨ã¦ã‚’オーãƒãƒ¼ãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚
0: オーãƒãƒ¼ãƒãƒ¼ãƒ‰ç„¡ã—(デフォルト), 1: mail()関数を
オーãƒãƒ¼ãƒãƒ¼ãƒ‰,
2: str*() 関数をオーãƒãƒ¼ãƒãƒ¼ãƒ‰, 4: ereg*() 関数をオーãƒãƒ¼ãƒãƒ¼ãƒ‰
Webブラウザã¯ã€ãƒ•ォームã®ãƒ‡ãƒ¼ã‚¿ã‚’投稿ã™ã‚‹éš›ã«åŒã˜æ–‡å—エンコーディ
ングを使用ã™ã‚‹ã¨ä»®å®šã•れã¾ã™ã€‚ã—ã‹ã—ã€ãƒ–ラウザã¯åŒã˜æ–‡å—エンコー
ディングを使用ã—ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ブラウザã§ä½¿ç”¨ã•れる文å—エ
ンコーディングを検出ã™ã‚‹ã«ã¯ã€mb_http_input()
ã‚’å‚照下ã•ã„。
HTMLフォームã§enctype ãŒ
multipart/form-data ã«è¨å®šã•れãŸå ´åˆã€
mbstringã¯POSTãƒ‡ãƒ¼ã‚¿ã®æ–‡å—エンコーディングを
変æ›ã—ã¾ã›ã‚“。ユーザã¯ã€å¤‰æ›ã«å¿œã˜ã¦ã‚¹ã‚¯ãƒªãƒ—ト内ã§å¤‰æ›ã‚’行ã†å¿…è¦
ãŒã‚りã¾ã™ã€‚
ã—ã‹ã—ã€ãƒ–ラウザå´ã§ã‚‚HTMLå†…ã®æ–‡å—エンコーディングを検出ã™ã‚‹ã“ã¨
ã¯å¯èƒ½ã§ã™ã€‚HTMLヘッダã§charsetã‚’è¨å®šã™ã‚‹æ–¹ãŒ
より良ã„ã§ã—ょã†ã€‚æ–‡å—エンコーディングã«å¿œã˜ã¦
default_charsetを変更ã—ã¦ä¸‹ã•ã„。
例 1php.ini è¨å®šã®ä¾‹ ; デフォルトã®è¨€èªžã‚’è¨å®š
mbstring.language = English; 英語ã«è¨å®š (デフォルト)
mbstring.language = Japanese; 日本語ã«è¨å®š
;; デフォルトã®å†…部エンコーディングをè¨å®š
;; 注æ„: PHPã§å‹•作ã™ã‚‹æ–‡å—エンコーディングを使用ã™ã‚‹ã“ã¨
mbstring.internal_encoding = UTF-8 ; 内部エンコーディングをUTF-8ã«è¨å®š
;; デフォルトã®HTTP入力文å—エンコーディングをè¨å®š
;; 注æ„: スクリプトã§ã¯http_inputã®è¨å®šã¯å¤‰æ›´ã§ãã¾ã›ã‚“。
mbstring.http_input = pass ; 変æ›ã—ãªã„。
mbstring.http_input = auto ; HTTP入力をautoã«è¨å®š
; "auto" ã¯ã€"ASCII,JIS,UTF-8,
; EUC-JP,SJIS"ã«å±•é–‹ã•れã¾ã™ã€‚
mbstring.http_input = SJIS ; HTTP入力をSJISã«è¨å®š
mbstring.http_input = UTF-8,SJIS,EUC-JP ; é †ç•ªã‚’æŒ‡å®š
;; デフォルトã®HTTP出力文å—エンコーディングをè¨å®š
mbstring.http_output = pass ; 変æ›ã›ãš
mbstring.http_output = UTF-8 ; HTTP出力エンコーディングをUTF-8ã«æŒ‡å®š
;; ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ–‡å—ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°æ¤œå‡ºé †åºã‚’è¨å®š
mbstring.detect_order = auto ; デフォルトã®é †ç•ªã‚’autoã«è¨å®š
mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; é †ç•ªã‚’æŒ‡å®š
;; 代替文å—ã®ãƒ‡ãƒ•ォルト値をè¨å®š
mbstring.substitute_character = 12307 ; Unicode値を指定
mbstring.substitute_character = none ; æ–‡å—を出力ã—ãªã„
mbstring.substitute_character = long ; longã®ä¾‹: U+3000,JIS+7E7E |
|
例 2EUC-JP ユーザ用ã®php.iniã®è¨å®š ;; 出力ãƒãƒƒãƒ•ァリングを無効ã«ã™ã‚‹
output_buffering = Off
;; HTTP charsetヘッダをè¨å®š
default_charset = EUC-JP
;; デフォルトã®è¨€èªžã‚’日本語ã«ã™ã‚‹
mbstring.language = Japanese
;; HTTP 入力変æ›ã‚’有効ã«ã™ã‚‹
mbstring.encoding_translation = On
;; HTTP 入力エンコーディング変æ›ã‚’autoã«è¨å®š
mbstring.http_input = auto
;; HTTP出力をEUC-JPã«è¨å®š
mbstring.http_output = EUC-JP
;; 内部エンコーディングをEUC-JPã«è¨å®š
mbstring.internal_encoding = EUC-JP
;; ç„¡åŠ¹ãªæ–‡å—を出力ã—ãªã„
mbstring.substitute_character = none |
|
例 3SJISユーザ用ã®php.iniã®è¨å®š ;; 出力ã®ãƒãƒƒãƒ•ァリングを有効ã«
output_buffering = On
;; 出力ã®å¤‰æ›ã‚’有効ã«ã™ã‚‹ãŸã‚ã« mb_output_handler ã‚’è¨å®š
output_handler = mb_output_handler
;; HTTPヘッダ charset ã‚’è¨å®š
default_charset = Shift_JIS
;; デフォルトã®è¨€èªžã‚’日本語ã«è¨å®š
mbstring.language = Japanese
;; HTTP 入力変æ›ã‚’有効ã«ã™ã‚‹
mbstring.encoding_translation = On
;; HTTP入力エンコーディング変æ›ã‚’autoã«è¨å®š
mbstring.http_input = auto
;; SJISã«å¤‰æ›
mbstring.http_output = SJIS
;; 内部エンコーディングをEUC-JPã«è¨å®š
mbstring.internal_encoding = EUC-JP
;; ç„¡åŠ¹ãªæ–‡å—を出力ã—ãªã„
mbstring.substitute_character = none |
|
リソース型
ã“ã®æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ãƒªã‚½ãƒ¼ã‚¹åž‹ã‚’å…¨ã定義ã—
ã¾ã›ã‚“。
定義済ã¿ã®å®šæ•°
ã“れらã®å®šæ•°ã¯ã€ã“ã®æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã§å®šç¾©ã•れã¦ãŠã‚Šã€
ã“ã®æ‹¡å¼µãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒPHP内部ã«ã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã‚‹ã‹å®Ÿè¡Œæ™‚ã«å‹•çš„ã«ãƒãƒ¼
ドã•れるã‹ã®ã©ã¡ã‚‰ã‹ã®å ´åˆã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™ã€‚
HTTP入出力
HTTP å…¥å‡ºåŠ›ã®æ–‡å—エンコーディング変æ›ã¯ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ã‚‚変æ›ã—ã¦
ã—ã¾ã„ã¾ã™ã€‚HTTP入出力ã«ãƒã‚¤ãƒŠãƒªãƒ‡ãƒ¼ã‚¿ãŒä½¿ç”¨ã•ã‚Œã‚‹å ´åˆã€ãƒ¦ãƒ¼ã‚¶ã¯ã€
æ–‡å—エンコーディング変æ›ã‚’制御ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
HTMLフォームã®enctypeãŒ
multipart/form-dataã«è¨å®šã•れãŸå ´åˆã€
mbstring ã¯ã€POSTãƒ‡ãƒ¼ã‚¿ã®æ–‡å—エンコーディング
を変æ›ã—ã¾ã›ã‚“。ã“ã®å ´åˆã€æ–‡å—列を内部文å—エンコーディングã«å¤‰æ›
ã—ã¦ã‚„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
HTTP入力
PHPスクリプトã§HTTP入力文å—変æ›ã‚’制御ã™ã‚‹æ‰‹æ®µã¯ã‚りã¾ã›ã‚“。
HTTP入力文å—変æ›ã‚’無効ã«ã™ã‚‹ã«ã¯ã€php.ini
ã§è¡Œã†å¿…è¦ãŒã‚りã¾ã™ã€‚
例 4php.iniã§HTTP入力変æ›ã‚’無効ã«ã™ã‚‹ ;; HTTP入力変æ›ã‚’無効ã«ã™ã‚‹
mbstring.http_input = pass
;; HTTP入力変æ›ã‚’無効ã«ã™ã‚‹ (PHP 4.3.0以é™)
mbstring.encoding_translation = Off |
|
PHPã‚’Apacheモジュールã§ä½¿ç”¨ã™ã‚‹å ´åˆã€PHP iniã®è¨å®šã‚’
httpd.confã«ã‚ˆã‚Šä»®æƒ³ãƒ›ã‚¹ãƒˆå˜ä½ã§ã€ã¾ãŸã¯
.htaccessã«ã‚ˆã‚Šãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå˜ä½ã§ä¸Šæ›¸ãã™
ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚詳細ã¯ã€è¨å®š
ã®ç¯€ãŠã‚ˆã³Apacheマニュアルをå‚照下ã•ã„。
HTTP出力
å‡ºåŠ›ã®æ–‡å—エンコーディング変æ›ã‚’有効ã«ã™ã‚‹æ–¹æ³•ã¯è¤‡æ•°ã‚りã¾ã™ã€‚
一ã¤ç›®ã¯ php.iniã€ã‚‚ã†ï¼‘ã¤ã¯
ob_start() ã§ ob_start
ã®ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã¨ã—ã¦
mb_output_handler() を指定ã™ã‚‹ã‚‚ã®ã§ã™ã€‚
注æ„
PHP3-i18nã®ãƒ¦ãƒ¼ã‚¶ã«ã¨ã£ã¦ã¯ã€mbstringã®å‡º
力変æ›ã¯ã€PHP3-i18nã¨ã¯ç•°ãªã£ã¦ã„ã¾ã™ã€‚æ–‡å—エンコーディング
ã¯ã€å‡ºåŠ›ã®ãƒãƒƒãƒ•ァリング機能を使用ã—ã¦å¤‰æ›ã•れã¾ã™ã€‚
例 5php.ini ã®è¨å®šä¾‹ ;; å…¨ã¦ã®PHPページã§å‡ºåŠ›ã®æ–‡å—エンコーディング変æ›ã‚’有効ã«ã™ã‚‹
;; 出力ãƒãƒƒãƒ•ァリングを有効ã«ã™ã‚‹
output_buffering = On
;; mb_output_handlerã«ã‚ˆã‚‹å‡ºåЛ変æ›ã‚’有効ã«ã™ã‚‹
output_handler = mb_output_handler |
|
例 6スクリプトã®ä¾‹ <?php
// ã“ã®ãƒšãƒ¼ã‚¸ã§ã®ã¿å‡ºåŠ›ã®æ–‡å—エンコーディング変æ›ã‚’有効ã«ã™ã‚‹
// HTTP 出力文å—エンコーディングをSJISã«è¨å®šã™ã‚‹
mb_http_output('SJIS');
// 出力ã®ãƒãƒƒãƒ•ァリングを開始ã—ã€ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯é–¢æ•°ã¨ã—ã¦"mb_output_handler"
// を指定ã™ã‚‹
ob_start('mb_output_handler');
?> |
|
サãƒãƒ¼ãƒˆã•れる文å—エンコーディング
ç¾åœ¨ã€ä»¥ä¸‹ã®æ–‡å—エンコーディングãŒ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ã®å‡¦ç†ã«ãŠã„ã¦ãれãž
れã«é©ã—ãŸæ–‡å—集åˆã‚’使用ã™ã‚‹ã“ã¨ãŒé‡è¦ã¨ãªã‚Šã¾ã™ã€‚
1æ–‡å—ã¯æœ€å¤§6ãƒã‚¤ãƒˆã«ãªã‚‹
マルãƒãƒã‚¤ãƒˆæ–‡å—ã¯é€šå¸¸ã‚·ãƒ³ã‚°ãƒ«ãƒã‚¤ãƒˆæ–‡å—ã®2å€ã®å¹…ã¨ãªã‚Šã¾ã™ã€‚
広ã„å¹…ã®æ–‡å—ã¯ã€Œå…¨è§’ã€ã€ç‹ã„å¹…ã®æ–‡å—ã¯ã€ŒåŠè§’ã€ã¨å‘¼ã°ã‚Œã¾ã™ã€‚
通常ã€ã€Œå…¨è§’ã€æ–‡å—ã¯å›ºå®šå¹…ã§ã™ã€‚
ã„ãã¤ã‹ã®æ–‡å—エンコーディングã§ã¯ã€ãƒžãƒ«ãƒãƒã‚¤ãƒˆæ–‡å—列を開始/
終了ã™ã‚‹ãŸã‚ã®ã‚·ãƒ•ト(エスケープ)シーケンスãŒå®šç¾©ã•れã¦ã„ã¾ã™ã€‚
SMTP/NNTPã§ã¯ã€ISO-2022-JP を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
"i-mode" 用Webサイトã¯ã€SJISを使用ã™ã‚‹å¿…è¦ãŒã‚りã¾
ã™ã€‚
リファレンス
マルãƒãƒã‚¤ãƒˆæ–‡å—エンコーディングã¨é–¢é€£ã™ã‚‹å•題ã¯éžå¸¸ã«è¤‡é›‘ã§ã™ã€‚
ã“ã“ã§è©³ç´°ã«ã¤ã„ã¦è¨˜è¿°ã™ã‚‹ã“ã¨ã¯ä¸å¯èƒ½ã§ã™ã€‚詳細ãªäº‹é …ã«ã¤ã„ã¦ã¯ã€
以下ã®URLãŠã‚ˆã³ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’å‚照下ã•ã„。