DBから出力の際preg_replace等が効かぬ
データベースを使ったウェブサイト。
POSTを使ったformタグより、textareaにてテキストをsql文にて、
MySqlにinsertし、(このときにmysql_real_escape_string)
読み出すときにhtmlspecialcharsしてprint。
これが一般的な流れなのですが、
上記のまま行うと、改行(\r\n)がウェブ上に見えてしまいます。
ですので、
1:print preg_replace("/\r\n/","<br />", htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8'));
2:print nl2br(htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8'));
などをやって消そうとしているのですが消えません。
ためしに、
$aaa ="適当な文字";
1:print preg_replace("/\r\n/","<br />", htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8'));
2:print nl2br(htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8'));
のように、MySqlを介さずに直接出力した場合、
ちゃんと改行コードは<br />に変更してくれましたので
ソースの記述ミスではないと思うのです。
原因はなににあるでしょうか。
なお、現状phpmyadminで覗くと、
「フィールドA」(mysql_real_escape_stringを通してinsert)
-----
あいうえお\r\nかきくけこ
-----
「フィールドB」(mysql_real_escape_stringを通さずにinsert)
-----
さしすせそ
たちつてと
-----
となっているフィールドがありますが、
それらがhtmlで出力されたもののソースを見ると、
-----
A:あいうえお\r\nかきくけこ
B:さしすせそ<br />たちつてと
となぜかBのほうが希望通りの動きをします。
cを通さずにDBに入れてしまったほうが希望通りに動きます。
さっぱり困りました。