• 締切済み

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
  • 回答数2
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>ちなみに、「文字列として変換しないように」とはどういうことでしょうか? \nと可視化できているということはデータをテーブルに投入するときに \n(改行マーク)を'\n'という文字列に置き換えるような処理が 入っているはずです。(もしくは\nと手で書いているはずです) 極端なはなし INSERT INTO hoge(data) values('Hello!! World!!'); のように改行は改行のままで流し込んでやればいいでしょう。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>DBから取得した「Hello!! \n World!!!」という文字列 DBから取り出した時点で'\n'になっているのですから >nl2br($a)をnl2br(str_replace('\n',"\n",$a))のように一手間加える が必要最小限の処理で、むしろ気持ちいい処理だと思いますが? 検討すべきはDBに投入する時点で文字列として変換しないようにすることです。

nobuzoh0407
質問者

補足

私の中の迷いを記述し忘れていました。 >>nl2br($a)をnl2br(str_replace('\n',"\n",$a))のように一手間加える >が必要最小限の処理で、むしろ気持ちいい処理だと思いますが? 確かにこれでいいといえばいいのですが、 google先生にたずねても、参考にした「FuelPHP入門」という本にもそのような一手間は書かれていませんでした。 ですので、何かのバージョンの違いやコンフィグの内容の相違があるのではないか、と考えました。 一手間加えるのは簡単なのですが、そもそもその必要がないのでは?ということです。 ちなみに、「文字列として変換しないように」とはどういうことでしょうか?

関連するQ&A

  • 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
  • phpの<br>\nと\nとエスケープシーケンスについて

    現在、phpを学んでいるのですが、いきなり"<br>\n"と"\n"の違いがわからなくて困っています。\nはエスケープシーケンスで改行を意味するのですよね?<br>も改行を意味するから・・・わざわざダブルクォーテーションの中に<br>を書かなくても良いのでは・・・ と思うのですが・・・違うのでしょうか!? またエスケープシーケンスについてなのですが、 ¥を付けて表す特殊文字がエスケープシーケンスなのですね。 しかし、シングルクォーテーション内では「¥’」と「\\」だけが使える。 ダブルクォーテーション内では記述すると画面に表示されないということですが・・・。 ではエスケープシーケンスっていつ使うのですか?使い道がないような気がするのですが・・・・。 使えるのは、シングルクォーテーション内の「¥’」と「\\」だけになるのでは・・・・。 そのへんのところを教えてください。

    • ベストアンサー
    • PHP
  • phpとhtml間のデータ送信時「テキスト改行」処理について

    自分で調べてみましたが、どうしてもわからず行き詰まりました。 どなたかお知恵を貸して頂ければ幸いです。 【使用ファイル】 a.php php処理 b.html db抽出データ表示とフォーム(編集画面) c.html フォーム入力内容表示(確認画面) データ送信はPOSTとSmarty併用 dbへはMySQLで格納 【変数】 $z テキストエリアの項目値 【流れ】 a.php→b.html→a.php→c.html→a.php→b.html/dbへ格納 1:a.phpでdbよりデータ(テキスト)を抽出し追加、変数$zに格納。 2:Smartyでb.htmlへ$zを送る。送り先はフォーム内のテキストエリア値。 3:$zにテキスト追加で改行発生 (\n発生と予測)。 4:b.htmlからPOSTでa.phpへ。 nl2br($z)処理をし、<br />挿入。 5:Smartyでc.htmlへ$zを送る。 $zには<br>と\nの両方が入っている状態。改行表示される。ブラウザのページソースでは<br />が入っている。 6-1:c.html(POST)→a.php(smarty)→b.html str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態 smartyでb.htmlへ 6-2:c.html(POST)→a.php→db格納  str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態でdbへ格納 6-1,2とも<br />を入れたままだと文字列に<br />が入ってしまう 7:a.php→b.htmlで再度$zを呼び出してみると(1:の処理)<br />を取り除いたはずなのに、ブラウザではきちんと改行表示されている。 ブラウザのページソースに<br />の表示はない 【疑問点】 3:\nは発生してPOSTでa.phpにきているのか? きている種類が\nまたは他の改行文字かどうかを調べる手段はあるのか?バイナリ関連で調べるのか? 6-1:<br />を削除してhtmlへ送っているのに改行表示されるのか? <br />が文字列扱いになるのはなぜか? 6-2:dbでは\nが改行として認識されるのか? 7:\nしか入っていない文字列をブラウザ表示して、なぜ改行表示されるのか? 以上です。考えれば考える程にわからなくなってきました。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • フォームの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

    いつもお世話になっております。 ちょっとわからないことがあり質問させていただきます。 ファイルの読み込みで $fp= fopen("1.txt","r"); list($i,$j,$k,$l) = explode(",",fgets($fp)); で1.txtの中身は 1,2,3,aaa\r\nbbbb というカンマ区切りのファイルになっています。 しかし print nl2br($l); をブラウザで見ると\r\nがそのまま表示されてしまいます。 gettype($l)はstringと表示されます。 ちなみに $l="aaa\r\nbbbb"; print nl2br($l); は改行されたものが表示されます。 php4.3.10でレンタルサーバです。 ファイルからの取り出し方に問題があるのでしょうか? もしくはデータのの書き出し方に問題があるのでしょうか?(1.txtはフォーム上から書きこみます) ご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • <br>が文字列で出力されてしまいます

    言語:php フレームワーク:ethna 現在DBから取り出したtext型のデータをブラウザに出力したいと考えています。 その際抜き出したデータ、数箇所改行されているものです。 ----------- こんにちは! 明日も頑張りましょう! では。 ----------- データ取り出しの際に「str_replace」や「nl2br」を使用して、「\r\n」を「<br>」に変換してみたのですが、実際にそのデータをテンプレート側で出力した際に、 『こんにちは!<br>明日も頑張りましょう!<br>では。』となってしまいます。 ちなみに出力方法はテンプレートで下記のように記述しています。 この中には先ほどのデータが入っています。 {$app.text} <br>が表示されているということで、変換はうまくいっていると思うのですが、文字列として表示されてしまい困っています。 どなたか解決方法をご存知の方がいらっしゃいましたら、どうぞ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • nl2br()の記入例

    PHPを始めたばかりで行きづまってしまいました。 MySQLを利用したデータの出し入れなのですが、テキストエリア内の文章の改行についてです。 input.php(入力)⇒confirm.php(確認)⇒end.php(完了) という流れなのですが、input.phpで入力した内容をconfirm.phpで確認すると文章の改行がされてなかったので色々検索した結果、nl2br()使うというところまでは解ったのですが、実際どのように書くのか解りません・・・。 例えばこのようなソースの場合、どのような記述をすればいいのでしょうか? <html> <head> <title>薬屋さん</title> </head> <body> <?php $con = mysql_connect('aaa', 'bbb', 'ccc'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('ddd', $con); if (!$result) { exit('データベースを選択できませんでした。'); } $result = mysql_query('SELECT * FROM kusriya', $con); echo "<dl>\n"; while ($data = mysql_fetch_array($result)) { $id = $data['id']; $shop = htmlspecialchars($data['shop']); $address = htmlspecialchars($data['address']); $phone = htmlspecialchars($data['phone']); $comment = htmlspecialchars($data['comment']); $navi = htmlspecialchars($data['navi']); $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> <form method="post" action="test_confirm.php"> <table> <tr> <th>ID</th><td><input type="text" name="id" /></td> </tr> <tr> <th>店名</th><td><input type="text" name="shop" /></td> </tr> <tr> <th>住所</th><td><input type="text" name="address" /></td> </tr> <tr> <th>電話</th><td><input type="text" name="phone" /></td> </tr> <tr> <th>コメント</th><td><textarea name="comment" cols="80%" rows="5"></textarea></td> </tr> <tr> <th>ルート</th><td><textarea name="navi" cols="80%" rows="5"></textarea></td> </tr> </table> <input type="submit" value="送信" /> <input type="reset" value="リセット" /> </form></body> </html> よろしくお願いします。

    • 締切済み
    • PHP
  • 変数の中身が出力されない

    下記のソースで、(1)の Hello World!! は出力されるのですが、(2)は何も出力されません。なぜでしょうか? <?php $hello = "Hello World!!"; ?> <HTML><BODY> (1) <?php print $hello; ?><BR> (2) <?= $hello ?><BR> </BODY></HTML> php.iniで register_globals = On にしても同じでした。 環境はPHP5、Apache2.2です。

    • ベストアンサー
    • PHP
  • コードを作成してアクセスしたけどうまく表示されない

    先日からPHPについて勉強を始めました。 「独習PHP」という本を参考にして独学で学んでいるのですが ApacheとPHPを四苦八苦しながらも何とかインストールでき 基本的なコードで書かれたPHPファイルを作成したのですが そのファイルへアクセスした際、英字は問題なく表示されるのですが ひらがな・漢字(恐らく2byte文字全般)がうまく表示されません。 PHPファイル内容と表示内容は以下の通りです。 PHPファイル <?php //print命令は指定された文字列を表示するための命令です。 print('hello,world!<br/>'); print('こんにちは、世界!'); ?> 表示内容 hello,world! ??????A??E! 上記のようになってしまいます。 まだ学び始めたばかりでつまずいてしまい、何がいけないのかわからず困っています。 原因がわかる方、どうかご教授お願いいたします。

    • ベストアンサー
    • PHP
  • PHPから、MySQL内に日本語名のテーブルを作成する事ができません。

    PHPから、MySQL内に日本語名のテーブルを作成する事ができません。 いつも、お世話になっております。 小生、現在、WindowsXPSP3上で、Apache2.2.15とMySQL5.1.46とPHP5.2.13を使用し、PHPを勉強している、PHP初心者です。 今回質問させて頂きたいのは、PHPからMySQL内にデータベースを作成後、日本語名でテーブルを作成したいのですが、なぜか作成できません。 PHPのソースは以下の様になっています。 -----mysql.php----- <?php //MySQLに接続 $sql = mysql_connect('localhost', 'root', 'root'); if(!$sql){ print("MySQLに接続失敗" . "<br>\n"); mysql_close($sql); die(); } else{ print("MySQLに接続成功" . "<br>\n"); } //DB作成 $create_db = 'CREATE DATABASE HUMAN'; if(mysql_query($create_db, $sql)){ print("DB作成成功" . "<br>\n"); } else{ print("DB作成失敗" . "<br>\n"); mysql_close($sql); die(); } //DB選択 if(!(mysql_select_db("HUMAN"))){ print("DB選択失敗" . "<br>\n"); mysql_close($sql); die(); } //文字コードをutfに設定 mysql_query("set names utf-8"); //テーブル作成 $create_table = "CREATE TABLE 人間 (名前 VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 年齢 INT NOT NULL, 身長 VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, 体重 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, 職種 VARCHAR(50) CHARACTER SET utf8 COLLATE uft8_general_ci NOT NULL, ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;"; if(mysql_query($create_table, $sql)){ printf("テーブル作成成功" . "<br>\n"); } else{ print("テーブル作成失敗" . "<br>\n"); mysql_close($sql); die(); } //テーブルのデータを取得、表示 $select = "SELECT * FROM 人間"; if($result = mysql_query($select, $sql)){ print("データ取得成功" . "<br>\n"); } else{ print("データ取得失敗" . "<br>\n"); mysql_close($sql); die(); } while($getdata = mysql_fetch_assoc($result)){ foreach($getdata as $output){ print($output . "<br>\n"); } } //MySQLにCOMMIT文送信 $commit = "COMMIT;"; if(mysql_query($commit, $sql)){ print("コミット成功" . "<br>\n"); } else{ print("コミット失敗" . "<br>\n"); mysql_close($sql); die(); } //MySQLの接続終了 mysql_close($sql); ?> 以上です。 お忙しい中、申し訳ございませんが、先輩方ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう