dポイントプレゼントキャンペーン実施中!

TEXTAREAで入力した値をDBに対して、
.htmlspecialchars(mysql_real_escape_string(stripslashes($_POST["in3"])),ENT_QUOTES)
の記述で保存した時、
文字化けコード(「ソ」「表」)が入っている場合に改行を行うと、
改行部に「\r」が文字として保存されてしまいます。
また、文字化けコードがない場合には「\r」は表示されず、
文字化けコードと改行までの間に半角英数字が入っていると「\r」は表示されません。

このような状態になる理由や回避方法についてコメントいただきたく思います。

よろしくお願いいたします。

A 回答 (1件)

ふぇぇ、PHPのこれってまだ直ってなかったんだ。


たとえば、
$keikaku = "計画表\r作成中";
という風に「変数の中の」文字列があった時に、PHPはなんとこれをエスケープ展開してしまうんだ。
 (PHPが構文の元ネタにした)オリジナルのC言語では、「"計画表"と0x0aと"作成中"」になる(処理系による)。当然だよね。だが、スクリプト言語であるPHPは、"表"の後ろ1バイトが0x5c, '\'であるので、"計画?\\r作成中"と解釈されるんだ。"\\"はPHPでは「半角円マーク一つ」と処理されるので、"計画?\\r作成中"→「計画?\r作成中」という表示になるわけだ。

 根本的な解決策は、ShiftJISを使わない事だが、場当たり的な対処法は色々あるので「PHP ShiftJIS 表 ソ」で検索して、気に入った方法を使えば良いのではないかな。
    • good
    • 0
この回答へのお礼

遅くなりました。
解決はしていませんが、何が原因でどうしてなのか、
理解が少しずつできました

ありがとうございます。

お礼日時:2007/02/23 16:22

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