- ベストアンサー
sjisの文字化けとその対処方法について
今掲示板を作っています。 sjisでは特定の文字(表・予・申・能など)が文字化けする問題がありますが、簡単に対処できる方法をさがしています。 一番やりたい方法が、str_replace()関数を使って、例えば「表」を「\表」と書き換える関数を作って、何か書き込むときにはテキストデータをその関数にかけてしのぐというものです。しかし、実際に下のようにやってみると、PHPエラーが発生します。 $textdate = str_replace("表","\表",$textdate); ちなみに、この文字が「表」以外の文字化けをおこさない文字ならばこのエラーは発生しません。 文字コードレベル(16進数レベル)で置換しなければならないのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
str_replaceは、日本語には正しく対応しないと聞き、入れ替えでしたた、mb_ereg_repalce の方が良いかと思います。 未確認ですが、"\表" → "\\表" 、または '\表' と思います。 また、チェックする時だけeuc-jpに変換して、後でshift_jisに戻すというのがあります。 $textdate = mb_convert_encoding( $textdate, 'EUC-JP', 'SJIS' ); $textdateの処理 $textdate = mb_convert_encoding( $textdate, 'SJIS', 'EUC-JP' ); ただ、sjisの文字化けに関しては、最初から全てshift_jisではなくeuc-jpで記すとこれらが解決いたします。 それぞれのファイルのエンコーディングをEUC、htmlのmetaのcharsetをECU-JPに変えるだけで済みますが。
その他の回答 (2)
- nitorin
- ベストアンサー率55% (11/20)
大体stripslashes関数で対応しますよ。
お礼
回答ありがとうございます。 stripslashes関数に関して調べてみて試してみようと思います。
- noocyte
- ベストアンサー率58% (171/291)
PHP のことは全然知らないので,シフトJISという点についてだけコメントします. >「表」を「\表」と書き換える それをやるなら,「\表」じゃなくて「表\」です. 「表」= 0x95,0x5C(='\') なので, 「\表」= 0x5C('\'),0x95,0x5C('\') 「表\」= 0x95,0x5C('\'),0x5C('\') Shift_JIS (Wikipedia) http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.AB0x5C.E3.82.92.E6.8C.81.E3.81.A4.E6.96.87.E5.AD.97.EF.BC.88.E3.81.84.E3.82.8F.E3.82.86.E3.82.8B.E3.80.8C.E3.83.80.E3.83.A1.E6.96.87.E5.AD.97.E3.80.8D.EF.BC.89.E4.B8.80.E8.A6.A7 → 2バイト目に0x5Cを持つ文字(いわゆる「ダメ文字」)一覧
お礼
回答ありがとうございます。 「表\」が正しいとは知りませんでした。あぶないところでした。
お礼
回答ありがとうございます。 まさかその手があったとは思いもよりませんでした。 さっそくチェック時だけeuc-jpに変換の方法を試してみたいと思います。