• ベストアンサー

sjisの文字化けとその対処方法について

今掲示板を作っています。 sjisでは特定の文字(表・予・申・能など)が文字化けする問題がありますが、簡単に対処できる方法をさがしています。 一番やりたい方法が、str_replace()関数を使って、例えば「表」を「\表」と書き換える関数を作って、何か書き込むときにはテキストデータをその関数にかけてしのぐというものです。しかし、実際に下のようにやってみると、PHPエラーが発生します。 $textdate = str_replace("表","\表",$textdate); ちなみに、この文字が「表」以外の文字化けをおこさない文字ならばこのエラーは発生しません。 文字コードレベル(16進数レベル)で置換しなければならないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

 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に変えるだけで済みますが。

tenketu
質問者

お礼

回答ありがとうございます。 まさかその手があったとは思いもよりませんでした。 さっそくチェック時だけeuc-jpに変換の方法を試してみたいと思います。

その他の回答 (2)

  • nitorin
  • ベストアンサー率55% (11/20)
回答No.3

大体stripslashes関数で対応しますよ。

参考URL:
http://www.syon.co.jp/syontech/tech003.html
tenketu
質問者

お礼

回答ありがとうございます。 stripslashes関数に関して調べてみて試してみようと思います。

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.2

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を持つ文字(いわゆる「ダメ文字」)一覧

tenketu
質問者

お礼

回答ありがとうございます。 「表\」が正しいとは知りませんでした。あぶないところでした。