忍者ブログ

カウンター

プロモーション

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


  • 2024/11/22 00:24

PHP の環境をS-JIS からUTF-8 にする(泣)

PHP の調べ物

 またまた環境を一部環境を見直す話です。
今回は文字コードについて見直しします。

 文字コードというのは色々あり、表現できる文字の種類も違い、
そして文字コードを他の文字コードに変換しようと思うときに、その種類の違いが
変換できない文字を生んだりして困る様です。

 また、文字コードを他の文字コードと間違って解釈すると文字化けの原因に
なる様です。

 そんなこんななんですが、私が一番初めに手にした
ろくでもないPHP の入門書は、Windows 標準のメモ帳 で、
S-JIS を用いて書く方法を書いていて、
Web上でWebページ としてページが生成されたりするには
Web上の文字コードに合わせなければならないので
その場合、今現在の流れではUTF-8 でWebページの内容を
書くことが一般的となりつつある様なので、この時点でシフトJIS(S-JIS)を
使っているのは面倒な事につながり兼ねません。

 そして上記の方にある様に無駄に文字コードを変換することは
文字化けの原因になる可能性もありますし、それ以外に
MySQL に保管する文字データも無駄に変換して用いるべきではないと思います。

なのでMySQL の文字の設定とPHP の文字の設定をもう一度見直す事に
なるのだと思います。


php.inオプション名 適応場所、結果 意味、概要 値の表し方と補足 該当関数
mbstring.detect_order mb_detect_encoding 関数,
mb_send_mail 関数の
文字エンコーディング検出順序
文字エンコーディング検出順序を設定。  文字コードで1種類以上、またはauto。
auto ならばASCII,JIS,UTF-8,EUC-JP,SJIS
の検出順序。
mb_detect_order 関数
mbstring.http_input    HTTP 入力文字エンコーディングのデフォルトを設定。
入力をソース内部で指定した文字コードに変換する
場合に設定するが、元の
  文字コード1種のみ。指定し何もしないpass を
指定したり、auto を指定したならばASCII,JIS,
UTF-8,EUC-JP,SJISの検出順序で自動認識も
可能。
 mb_http_input 関数
mbstring.http_output  mb_output_handler 関数で指定した
出力バッファ。
 また、mb_output_handler 関数
を用いたときに
条件によって作られる
charset HTTP ヘッダの値にも作用。
 HTTP 出力文字エンコーディングのデフォルトを設定。
Content-type がtext/html である場合のみ出力変換が
有効になる。またmb_output_handler 関数などの
文字コード変換関数を用いなければ効力はない。
 文字コード1種のみ。指定し何もしないpass を
指定も可能。
mb_http_output 関数
mbstring.encoding_translation    入力される HTTP クエリに関して、
文字エンコーディング検出および
内部文字エンコーディングへの変換を行う
透過的な文字エンコーディングフィルタの設定。
 この値がOn であると入力されたクリエは
mbstring.http_input で指定した
文字エンコーディングであると判断し、
mbstring.internal_encodingで指定した
文字エンコーディングに変換をします。
 色々な意味合いで、入力がどんな
文字エンコーディングなのかや、
マルチバイト文字の関数を用いるのかなどを
考慮して設定する必要があります。
 スクリプト内部で設定できるのであれば、
Off にして使用することが可能です。
 公式サイト(HTTP 入出力)に、
「PHP スクリプトで
HTTP 入力文字変換を制御する
手段はありません。」
とあるので注意が必要。
(php.iniが書き換えられない環境
の場合にはApache の設定で、
php_value
mbstring.encoding_translation
Off
 を設定する) 
mbstring.internal_encoding 各マルチバイト文字の
関数で元のエンコーディング
種類が必要な関数。
mb_convert_encoding 関数,
mb_convert_kana 関数などで
引数がない場合に使用。
mb_decode_mimeheader 関数では
必須となるがソース内で該当関数で
指定可能。
内部エンコーディングと呼ばれているが、
関数内部で必要な時に使用される
暫定(既定)の文字エンコーディングの事。
 文字コード1種のみ。マルチバイト文字列系の
関数を使うときに自身で値を設定するのならば、
注釈にしてしまい用いない事も可能。
mb_internal_encoding 関数
default_charset 自動で生成される環境設定の場合、
charset HTTP ヘッダのContent-type:
の文字エンコーディング種別。
Content-type:ヘッダで character encodingを
出力する。
 PHPの処理はWebページ向けの処理のみでは
無いので、この設定が問題を発生させる場合は
値を空にして、charsetの送信設定を無効に
出来ます。 またWeb系の出力の場合にこの値を
空である無効にした場合には、header 関数で
値を指定する必要も考慮が必要になります。
 (header 関数)
output_handler 最終的な文字コーディングを必要と
した場合、フィルタとしてコールバック
関数を用いた後の出力の内容変化。
 出力する最終段階で内容を自動的に指定した
関数に送り処理させ、その関数の出力を最終出力
とする設定。(つまりこの事をリダイレクトと言う)
 つまりバッファを用い、文字エンコーディングを
他の文字エンコーディングに変える事を、
関数を選んで指定できます。
関数名もしくは空の値。
例としては、
"
ob_iconv_handler"か"mb_output_handler"
 や
"
ob_gzhandler()"か"zlib.output_compression"
 PHPのバージョンによっては、
イメージのようなバイナリデータであるのに
Content-Type: を
header 関数を用いて指定や、
バージョンや環境設定においては、
mb_http_output
 をpass に指定しなければ
バイナリデータがうまく処理できない場合が
あります。

コールバックとしての
mb_output_handler 関数 
(実体は ob_start 関数)
mb_detect_order
編集中

拍手[0回]

PR


  • 2010/07/18 12:49

コメント一覧

  • お名前
  • Email

  • コメント

  • Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  • パスワード
[PR]