プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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に変えるだけで済みますが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/22 18:26

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



参考URL:http://www.syon.co.jp/syontech/tech003.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/22 18:29

PHP のことは全然知らないので,シフトJISという点についてだけコメントします.



>「表」を「\表」と書き換える

それをやるなら,「\表」じゃなくて「表\」です.

「表」= 0x95,0x5C(='\') なので,

「\表」= 0x5C('\'),0x95,0x5C('\')
「表\」= 0x95,0x5C('\'),0x5C('\')


Shift_JIS (Wikipedia)
http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.9 …
→ 2バイト目に0x5Cを持つ文字(いわゆる「ダメ文字」)一覧
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/10/22 18:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!