• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:<br>が文字列で出力されてしまいます)

文字列出力で改行が正しく表示されない場合の解決方法

このQ&Aのポイント
  • 現在、DBから取得したテキストデータをブラウザに出力する際、改行が正しく表示されない問題が発生しています。
  • データ取得時に改行文字をHTMLの改行タグに変換する処理を施しましたが、テンプレートで出力すると文字列として表示されてしまいます。
  • この問題の解決方法として、改行文字をHTMLエンティティに変換することで正しく改行が表示されるようになります。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

Ethnaは$appなどの変数を展開するときにhtmlspecialcharsするようです(ある意味当然か・・・)。 http://www.ethna.jp/%C0%B0%B7%C1%A5%EB%A1%BC%A5%EB.html &br;に置換してもダメでしたか? http://www.ethna.jp/%C0%B0%B7%C1%A5%EB%A1%BC%A5%EB.html#f383c24f

non05410
質問者

お礼

解決しました! shimix様のおっしゃっていた通り、Ethnaは$appが自動でhtmlspecialcharsしてくれていたので、ただの文字列となって表示されてしまったようです。 データの受け渡しの際に、setAppNeというものを仕様するとエスケープされずに送信出来たので、無事に処理することが出来ました!ありがとうございます!

non05410
質問者

補足

&br;も試してはいたのですが、同じく文字列として表示されるだけでした。 同じく&amp;br;もダメでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

<BR>ではなく、<BR/>では・・・?

non05410
質問者

補足

<br><br/><br />これらも試してはいたのですが、全て同じく文字列として処理されます・・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 変換しないといけない文字

    htmlファイルからフォームの値を受け取りcsvに書き込み、書き込んだcsvファイルを別のhtmlファイルから読み出します。 書き込む際に変換もしくは削除しておかなければならない文字はありますか。 現在変換しているものは ・htmlspecialcharsでhtmlタグを変換 ・str_replaceでカンマを全角カンマに変換 ・str_replaceで"を”に変換 ・nl2brで改行を変換 これ以外にも変換しておかないといけないものがありましたら教えてください。

    • 締切済み
    • PHP
  • <br>と<br />を統合変換

    テキストの改行変換をジャバスクリプトで、 if(getId("br_1").checked==true){ str = str.replace(/&lt;br&gt;/g, "\n"); } if(getId("br_2").checked==true){ str = str.replace(/(&lt;br \/&gt;)/g, "\n"); } <input type="checkbox" name="br_1" />削除1 <input type="checkbox" name="br_2" />削除2 これで、 <br>と<br />が\n変換されるようになりましたが、 これで書き方は正しいでしょうか? また、 これをラジオボタンで 「なし」「削除1」「削除2」と単一選択にしたいのですが、 どうやればよいのでしょうか?  

  • エクセル出力について

    ASP+SQLserver2000にて、構築しております。 Content-Type: application/vnd.ms-excel Content-Disposition: attachment; filename=”hoge.xls” を利用して、データベースのレコードをエクセル形式で出力しています。(セルの枠をつける為にテーブルタグを使っています。) <br>タグが入っているレコードを出力すると、<br>の数だけ、行が増えてしまいます。 <br>のない同じ行の、他のセルは、行の数だけ、なぜか、rowspanで結合されています。 これを、1行で表示する為にエクセルのセル内で、データ内の<br>タグをエクセルの改行コードに変換して、セル内で改行させたいのですが、どのように変換Replaceすれば良いでしょうか? replace(strText,”<br />”,vbCrLf) replace(strText,”<br />”,CrLf) でもダメでした。

  • エクセル出力

    ASP+SQLserver2000にて、構築しております。 Content-Type: application/vnd.ms-excel Content-Disposition: attachment; filename=”hoge.xls” を利用して、データベースのレコードをエクセル形式で出力しています。(セルの枠をつける為にテーブルタグを使っています。) <br>タグが入っているレコードを出力すると、<br>の数だけ、行が増えてしまいます。 <br>のない同じ行の、他のセルは、行の数だけ、なぜか、rowspanで結合されています。 これを、1行で表示する為にエクセルのセル内で、データ内の<br>タグをエクセルの改行コードに変換して、セル内で改行させたいのですが、どのように変換Replaceすれば良いでしょうか? replace(strText,”<br />”,vbCrLf) または replace(strText,”<br />”,CrLf) でもダメでした。

  • フォームのtextareaにnl2brを使用すると、入力内容の改行部分に<br />が表示されてしまう。

    現在、フォームを作成しています。 セッションを利用してフォームの次のファイルにデータを受け渡しています。 問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。 フォームの流れ: start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。 mail.phpにおいて入力内容の確認及びデータ送信。 start.phpのtextarea以下: <textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea> 解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。) mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下: <?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?> start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。 入力例: あいうえおかきくけこ たちつてと 表示例(nl2br使用): あいうえおかきくけこ<br /> たちつてと 解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。 試しにnl2br()をコードから削除すると、以下のような表示となります。 表示例(nl2br未使用): あいうえおかきくけこたちつてと 解説:nl2brを使用しない場合、改行されません。 どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • NL2BRの不可解な結果

    初めて質問します。 まず、「NL2BR」で検索して2つのスレッドを読みました。どれもNL2BRを知らない方への回答で紹介されたものです。 遠方のLinux(2.2.16)にSSHで入り込んで、Apache + PHP4 + PostgreSQL でのWEB-DB用のPHPスクリプトを作成し、クライアントとしてはWindows-NT4.0(SP6a) + IE(6)でテストしております。 ところで、悩みとは、NL2BR関数の戻り値がおかしいと言う事です。New Line(NL)が無くならず、 <BR /> なるデーターに変換されます。 次に、PHPが NLを含むテキストデーターを $junk で受け取ったとして、 ereg_replace("\n", "<br>", $junk); としても、クライアント側に返送されるデーターには改行情報が残ってしまいます。 で、最後に ereg_replace("\r\n", "<br>", $junk); として、初めて当初のNL2BRの目的のデーターに変換できました。旨くいったのですからいいのかも知れませんが、悩んでいます。 悩み1:バグなのか、コンパイルミスなのか?  同じ結果の方はおられませんか?コンパイルミスなら同じライブラリーを参照する他の関数にも悪い影響が存在するのかも知れません。 悩み2:もしもバグなら、  どこかにバグの検索ページは無いでしょうか? また、パッチの配布を紹介しているページを知りませんか? 悩み3:クライアント側のOSやブラウザーで影響するのかどうか?  ネスケで実験したりする予定ですが、あくまでもMS上での事。マックではどうなのかとか、携帯モバイルだとどうなのかとか考えてしまいます。どなたか、この混沌から技術的に明らかにして欲しいと願っていますが、頼めますでしょうか。よろしくお願いいたします。 Linux: 2.2.16 PostgreSQL : 7.1.2 PHP4 : 4.0.5 回答が無ければ、悩まないで、NL2BRの利用を断念します。時間を見付けて、PHP4のソースを変更しようと思います。

    • ベストアンサー
    • PHP
  • TEXTAREAに書いた改行コードを正しくBRに

    置き換えたいのですが、<br>がたくさん増えてしまいます。 下記のように書き換えています。 foreach ($data as $key => $value) { $data[$key] = preg_replace("/^(\s| )+$/", "", $data[$key]); $data[$key] = strip_tags($data[$key]); $data[$key] = stripslashes($data[$key]); $data[$key] = mb_convert_kana($data[$key], "KV"); $data[$key] = htmlspecialchars($data[$key]); $data[$key] = str_replace("\r", "<br>", $data[$key]); $data[$key] = str_replace("\n", "<br>", $data[$key]); $data[$key] = mysql_escape_string($data[$key]); } 別途↓も入れましたが、1改行コードにつき2個<br>がつきます。 文字コードはutfです。 $data[$key] = str_replace("\r\n", "<br>\n", $data[$key]); 正しく改行コードを<br>に変換できないでしょうか?

    • ベストアンサー
    • PHP
  • PHP初心者です。コード内容を教えてください。

    PHP初心者なので以下のコードをお教えいただき たいです。これは改行について解説しているところに 出てきた例文です。 質問1 コードの1を実行した結果がブラウザ表示だと改行なし ソース表示だと改行ありで表示されるのですが、それがよく わかりません。'で文字列を囲うとそのまま出力されるため htmlで<br>されないというのはわかるのですが、ソース 表示が改行されているのが分かりません。ソースで改行 するには/(逆)nやPHP_EOLを使わなければ改行できないので はないでしょうか? (PHPコード1) $str = '改行を削除して処理します。<br> ダブルクオートじゃないと改行文字は扱えません。'; $str = str_replace(array('<br>','', '$str); echo $str; 質問2str_replace関数がありますが、この手のわからない 関数をリファレンスで引くと str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed のように説明には書いているのですが、str_replace("2","3","1"); 1の中の2すべてを3に置き換える。これはわかります。しかし、 説明例文に記載のmixedやら[, int &$count ] ) : mixedはよくわかりません これは何なのでしょうか? 長くなりましたがどうか回答お願いします。

    • ベストアンサー
    • PHP
  • nl2brが効かないのですが・・・

    phpで、DBから取得した「Hello!! \n World!!!」という文字列を表示したところ。 「Hello!! \n World!!!」とそのまま表示されました。 いろいろ調べた結果、 $a = 'Hello!! \n World!!!'; echo nl2br($a); とシングルクォーテーションで文字列を囲った場合と同じことになっているとわかりました。 しかし、DBから取得して$aに突っ込むまでの作業はFuelPHPというフレームワークでやっており、 じゃあダブルクォーテーションで囲っちゃえばいいじゃん、とはいかないのかなと思います。 私が考えているやれることは、 1.FuelPHPのcoreの部分を修正する 2.nl2br($a)をnl2br(str_replace('\n',"\n",$a))のように一手間加える なのですが、気持ちがよくはありません。 もしかすると、 ・FuelPHPのconfigの問題 ・PHPやapache、DB(MySql)はたまたOSの何らかの設定の問題 なのかな、とは思いますが検討もつかない状況です。 誰か解決策をお持ちの方はいますでしょうか? 因みに、Webサーバーの環境は以下の通りです。 Windows7 HomePremium apache 2.2.21 php 5.3.8 fuelPHP 1.1 MySql 5.5(文字セットはutf-8)

    • 締切済み
    • PHP
  • データベースのテキストデータの改行方法について

    別サイトで質問して nl2br関数を使えば改行が反映されるとわかったのですが、 <?php $str = nl2br(htmlspecialchars($str, ENT_QUOTES, 'UTF-8'), false); や <?php function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } など、 上記のを試してみたのですが、データベース上のテキストデータの改行がサイトに反映されず困っております。 http://uploda.cc/img/img52b55ee23c01f.png このようにDBに記入したデータをどのようにすれば改行されますでしょうか? 初心者で非常に申し訳ございませんが宜しくお願いします。

    • 締切済み
    • PHP