- PR -

改行コードをに変換したい

投稿者投稿内容
kokansetu
常連さん
会議室デビュー日: 2007/01/25
投稿数: 41
投稿日時: 2008-10-01 21:47
こんにちは、
お世話になっております。

データベースに、

INSERT INTO TEST VALUES('あいういお
かきくけこ');

のように改行してINSERTしたデータを、
HTMLで表示すると改行されていません。
そのため、
改行コードをHTMLの<br />に置換したいのですが、
うまくいきません。


Javaのコードは、

String str; (ここにデータベースから取り出したデータが代入されていて)

str = str.replaceAll("\n", "<br />");

と、書いて、置換したつもりなのですが、
HTMLで表示すると、

あいうえお<br />かきくけこ

と改行されずに表示されてしまいます。

どのようにコードを書いたらいいのでしょうか?

データベースは、H2 Database というデータベースを使っています。

よろしくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-10-01 21:57
・データベースから改行を含むデータを取り出す
・データベースはH2
・改行を改行タグに置換する
・改行タグを含む String を html で表示する
、と4つの条件が揃って問題が発生するように書いてありますが再現条件となっているのはどれでしょうか?

現象が発生するのに必要な条件はもう少し少ないような気がします。
焦点を明確にするためにもまずは何が起因して現象が発生しているのか絞り込んではいかがでしょう。

[ メッセージ編集済み 編集者: インギ 編集日時 2008-10-01 21:58 ]
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2008-10-01 23:03
各処理前後でデバッグ文を入れることは可能でしょうか?
そうすれば、大体どこの処理で問題が起こっているのか、が特定できます。

1)DBインサート前後
DBに入れる直前のデータを表示させると改行は入ってますか?
 DBに入れた後に、selectなどでデータを取り出したときに改行は入ってますか?

2)replaceAll前後
replaceAllする直前の文字列には改行が含まれていますか?
 改行が含まれている場合は、それは本当に"\n"ですか?
replaceAll後の文字列には"<br/>"が含まれていますか?

このあたりを調べてみるとよいかもしれません。

そんなこと言われなくても、とっくに調べてるよ!
という内容でしたらごめんなさい。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-10-01 23:09
引用:

kokansetuさんの書き込み (2008-10-01 21:47) より:
HTMLで表示すると、

あいうえお<br />かきくけこ

と改行されずに表示されてしまいます。


ブラウザでの表示がそうなるのであれば、HTMLに<pre>が残っていませんか?
Tram
常連さん
会議室デビュー日: 2002/10/10
投稿数: 21
お住まい・勤務地: 横浜
投稿日時: 2008-10-02 09:27
引用:

kokansetuさんの書き込み (2008-10-01 21:47) より:
HTMLで表示すると、

あいうえお<br />かきくけこ

と改行されずに表示されてしまいます。


もしかして、HTMLエンコードされて出力されているような気も。
表示されたhtmlのソースを見てみたら、
タグの"<"が"&lt;"に、">"が"&gt;"になっていたりしませんか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-10-02 11:24
HTMLがわかるなら、ブラウザのソースの表示で、
何が起こっているかが理解できるはず。
まずは、ソースを見て、改行周りがどう出力されているかを見てみましょう。
そのソースを元にブラウザは表現を変えているだけです。

引用:

String str; (ここにデータベースから取り出したデータが代入されていて)

str = str.replaceAll("\n", "<br />");

と、書いて、置換したつもりなのですが、
HTMLで表示すると、


どう出力しているんですか?
kokansetu
常連さん
会議室デビュー日: 2007/01/25
投稿数: 41
投稿日時: 2008-10-03 10:09
インギさん、84さん、GENZOさん、Tramさん、
かつのりさん、
ご返信ありがとうございました。


> もしかして、HTMLエンコードされて出力されているような気も。
> 表示されたhtmlのソースを見てみたら、
> タグの"<"が"&lt;"に、">"が"&gt;"になっていたりしませんか?

そのとおりです。

表示されたHTMLのソースには、

あいうえお
&lt;br /&gt;かきくけこ

と、表示されます。
どのように対処すればいいでしょうか?


> 2)replaceAll前後
> replaceAllする直前の文字列には改行が含まれていますか?
> 改行が含まれている場合は、それは本当に"\n"ですか?

"\n" かどうかは、わからないのです。
調べ方がわかりません。
ご教授いただけたらありがたいです。

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

[ メッセージ編集済み 編集者: kokansetu 編集日時 2008-10-03 10:29 ]

[ メッセージ編集済み 編集者: kokansetu 編集日時 2008-10-03 10:34 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-10-03 11:23
引用:

あいうえお
&lt;br /&gt;かきくけこ

と、表示されます。
どのように対処すればいいでしょうか?


ですから、どうやって出力しているのですか?
標準のServlet/JSPだけなら、勝手にエスケープしません。
何かしらのフレームワークやライブラリを使っているため、
タグのエスケープを行ったりしているのでしょう。
環境を書くようにしましょう。

引用:

"\n" かどうかは、わからないのです。
調べ方がわかりません。
ご教授いただけたらありがたいです。


http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/String.html#contains(java.lang.CharSequence)

最低限、Stringクラスなどのよく使うクラスのAPIドキュメントは、
一通り目を通しておきましょう。
流し読みでも、こんなことができるのかというヒントが得られますよ。

スキルアップ/キャリアアップ(JOB@IT)