Web

Multibyteについて

1 byteで表現可能な値は256通り。2bytesもあれば日本語や中国語など表現できるが、文字コードによってbyte数が違ったりする。EUCは2-3bytesだったりUTF-8は最大6bytesなどいろいろある

携帯向けのサイト構築の場合は、HTTP出力の文字エンコーディングをSJISにする必要がある

拡張モジュール

mbstring > iconv

Webシステムの文字エンコーディング = PHPの内部文字エンコーディングにするとよい

mbstring

内部エンコーディング(PHP内部で使用する文字エンコーディング)

mbstring.internal_encoding
mb_internal_encoding(スクリプト時)

で EUC-JPかUTF-8にする

HTML入力文字エンコーディングの自動変換(Browser -> PHP(サーバ側))

mbstring.encoding_translation = On

有効にする

HTML入力で利用されている可能性のある文字エンコーディング

mbstring.http_input = auto
mb_http_input(スクリプト時)

auto = ASCII,JIS,UTF-8,EUC-JP,SJISと同等 <- 通常はこちらでよい
pass = 自動変換設定を無効

HTML出力文字エンコーディングの自動変換

mbstring.http_output

出力文字エンコーディングの変換を行うにはmb_output_handler関数を出力バッファに登録する

output_handler = mb_output_handler(php.ini)
on_start('mb_output_handler')(スクリプト時)
↑これを行うと出力と内部文字エンコーディングが同じでも変換を試みる

iconv

文字コードと文字エンコーディング

  • 文字コード : 特定の文字を指定する為のコード体系
  • 文字エンコーディング: 特定のコード体系の文字を表現する方法
文字コード 文字エンコーディング 
JIS -> JIS X 0201/JIS X0908/JIS X 0212/JIS X0213Shift JIS(SJIS), CP932, EUC-JP, ISO-2022-JP
UnicodeUTF-8, UTF-16, UTF-32, UCS-2, UCS-4

BOM - Byte Order Mark。 UTF-16/UTF-32の仕様で設定出来る。Unicode規格ではBOMはつけてもつけなくてもいが、RFC2781(3.2 Byte order mark (BOM))では使用方法などが規定されている

MIMEエンコーディング

メール

日本語のメールはISO-2022-JPを使用し、SubjectはMIMEエンコードしなければいけない。

mb_send_mail
・mail関数を内部で呼んでいる
・mbstring.languageの設定に応じて目0る送信に必要な文字エンコーディングの変換を行う

mbstring.language = Japanese (php.ini)

PHPとの関連性

PHPのスクリプトエンジンと文字列関数はISO-8859エンコーディングで動作するように作られている。そのためISO-8859に互換性があるEUC-JP, UTF-8を使用しないといけない。

※EUC-JPの仮名は50音順にソートできるが、UTF-8ば仮名を使って日本語のソートが出来ない


Last-modified: 2012-03-12 (月) 17:05:05 (166d)