スレッド表示 | フラット表示〕 全トピック 910 件中 11 番目 次≫ ≪前

PHPの文字化けについて教えて下さい

created: 2009-06-26 10:06 | modified: 2009-07-03 11:24 | reply: 5

[4314] 文字化け対策の心がけ他

user: ゆうじ | created: 2009-06-27 02:26
こんばんわ。

「\」が出るってことは、magic_quotes_gpc は On ですか。
これが On だと「\」の文字が「\\」のようにエスケープされます。

ややこしいことに、Shift_JIS の文字コードには
2バイト目に「\(\x5C)」を含む文字が存在するので
magic_quote_gpc が On だと、
これらの直後に余分な「\」が付け加えられます。
「ソ(\x835C)」「表(\x955C)」なんかがそうです。

文字列処理を行うときには
エスケープしたままでは不都合ばかりなので
必ずエスケープを排除してからというのが実際です。
また PHP6 では magic_quote_gpc 設定そのものがなくなる見込みです。
なので magic_quote_gpc は Off で運用するよう考えた方がいいです。
そのうえで、必要な個所で最低限のエスケープ処理を行ったほうが
はるかにわかりやすく、Shift_JISのような副作用を招かずに済みます。

「\(\x5C)」の件は、Shift_JIS の文字コードの問題なので
PHPに限らず他の言語やアプリケーションでも副作用がありえます。
考えられてるように EUC や UTF-8 で統一する方向をおすすめします。


この他に文字化けの原因があるとすれば、
文字エンコーディングの誤検出だろうと推測できますが
誤検出個所や文字列が特定できないと対処もできません。
先ずは各ポイントで、想定した通りの文字エンコーディングか
mb_detect_encoding と bin2hex あたりを使って
確かめてみるしかありませんね。


SQL Server は使ったことが無くまったくわかりません。
こちらも知識不足ですみません。


おまけで、私の文字化け防止5か条です。

1.可能な限り、エスケープを含まない生データを取り扱う。

2.可能な限り、文字エンコーディングを統一する。

3.可能な限り、文字エンコーディング変換は行わない。

4.$_GET $_POST $_COOKIE の値は必ず文字エンコーディングを検出し
  必要があればPHPの内部エンコーディングに変換する。

5.DBやファイルなど外部への入出力時は、
  必要があれば文字エンコーディング変換を行い
  あわせてそれぞれの形式にあったエスケープ処理を行う。
Parent: 4313  reply: 4315 返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 910 件中 11 番目 次≫ ≪前
ページの一番上へ
twitterでつぶやく Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑