Dokokano.COM TOP | F/T's Labo | PHP | SptBBS | PHPBBS
PHP4での文字コードに関するテスト
Charset Test / PHP4での文字コードに関するテスト(^^;

 PHP4は、国際化対応がされていないので、文字コードによっては文字化けしたりします。
 どのように対処すればいいかは、よ〜く考えればわかることですが、考えるの面倒だったのでいろんなパターンを試してみました。
 結果は以下の通り、当たり前の結果がでました。(完)

● 結論

 PHP4の場合、ソースはEUCで書かないと絶対ダメです。

 出力をShift_JISにする場合は、入出力部分の文字コード変換のためのコードを書く必要があります。

 ソースをShift_JISで書いた場合、echo命令などの ""内の文字に「表」などの2バイト目に「\」と同じ文字コード(0x5c)がくる文字があると、 「\」でエスケープされるため意図しない結果になります。
 echo "表示"; の結果は一見正常なのですが、内部的には echo "表\示"; としてあるかわれています。  echo "表1"; の場合、文字化けします。

● テスト内容と結果

結果
(表示)
結果
(Form)
ソースの
文字コード
i18n_http_
input
i18n_http_
output
meta
charset
サンプルページ
SJIS SJIS SJIS SJIS ex_charset_sjis_sjis_sjis.php (ソース)
× SJIS SJIS SJIS EUC ex_charset_sjis_sjis_sjis_euc.php (ソース)
SJIS EUC SJIS SJIS ex_charset_sjis_euc_sjis.php (ソース)
× SJIS EUC SJIS EUC ex_charset_sjis_euc_sjis_euc.php (ソース)
× SJIS SJIS EUC EUC ex_charset_sjis_sjis_euc.php (ソース)
SJIS SJIS EUC SJIS ex_charset_sjis_sjis_euc_sjis.php (ソース)
× SJIS EUC EUC EUC ex_charset_sjis_euc_euc.php (ソース)
SJIS EUC EUC SJIS ex_charset_sjis_euc_euc_sjis.php (ソース)
× EUC SJIS SJIS SJIS ex_charset_euc_sjis_sjis.php (ソース)
EUC SJIS SJIS EUC ex_charset_euc_sjis_sjis_euc.php (ソース)
× EUC EUC SJIS SJIS ex_charset_euc_euc_sjis.php (ソース)
EUC EUC SJIS EUC ex_charset_euc_euc_sjis_euc.php (ソース)
EUC SJIS EUC EUC ex_charset_euc_sjis_euc.php (ソース)
× EUC SJIS EUC SJIS ex_charset_euc_sjis_euc_sjis.php (ソース)
EUC EUC EUC EUC ex_charset_euc_euc_euc.php (ソース)
× EUC EUC EUC SJIS ex_charset_euc_euc_euc_sjis.php (ソース)

● 項目の意味

結果(表示)

 HTMLのソース中に含まれている文字が正常に表示されることを確認
 ○ - 正常に表示された
 △ - HTML中の文字は正常だが、PHP(ECHO命令)で出力している部分は文字化け
 × - 正常に表示されなかった(文字化け等)

結果(Form)

 Formで入力した値が、Submitボタンを押した次のページで正常に表示されることを確認
 ○ - 正常に表示された
 △ - 正常に表示されなかった(\が含まれる)
 × - 正常に表示されなかった(文字化け等)
 
 △については文字「表」に「\」が追加されることで判別した。
 結果が両方○にであっても、使うべきではない組み合わせはある。 というか、特別な処理をしないなら全部EUCにするしかない。
 「i18n_http_input」の設定は結果に影響が無いように見える。

ソースの文字コード

 HTMLソースの文字コード(SJISまたはEUC)

i18n_http_input

 ソース行頭で指定している、PHPの設定値(SJISまたはEUC)

i18n_http_output

 ソース行頭で指定している、PHPの設定値(SJISまたはEUC)

meta charset

 ソース中のMETAタグで指定している文字コードセット

サンプルページ

 実際に実行出来るサンプルページ
 (「(ソース)」は、PHPソースを表示する)
  ・1.String from source
   HTMLのソース中に含まれている文字列の表示テスト
  ・2.String echo output
   PHPのECHO命令による静的な文字列の表示テスト
  ・3.String from FORM
   フォームで入力した文字列の表示テスト
  ・x.Test FORM
   2のテストで表示する文字列を入力するフォーム。
   入力後に[漢字表示テスト]ボタンを押して下さい。

● その他参考URL

 PHPでの文字コードの問題については、PHP研究室の次のページが参考になります。

WindowsでPHP3 - 基本的な考え方(日本語処理について)
http://tech.millto.net/~maacyan/php3/Win/



Copyright (c) 2001 Dokokano Labo. and FUKAYA Takashi All rights reserved.