- ベストアンサー
NL2BRの不可解な結果
- 初めて質問します。NL2BR関数の戻り値がおかしいと言う事です。New Line(NL)が無くならず、<BR />なるデーターに変換されます。
- NL2BR関数を使用して改行を変換する際、予期しない結果が発生しています。コンパイルミスやバグの可能性があり、他の関数にも影響があるかもしれません。
- NL2BR関数の使用により、クライアント側に改行情報が残ってしまいます。異なるOSやブラウザーでの動作も懸念されます。バグの検索ページやパッチの配布ページを探しています。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 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
- PHPです2つのスクリプトの相違がわかりません
PHPですが、以下の2つのスクリプトで同じ結果がでると思ったのですが現実は違いました。 henkan.php <html> <body> <?php $uketori=$_POST['UKETORI']; $uketori=str_replace("pen","pencil", $uketori); $uketori=strtoupper($uketori); print "$uketori"; ?> </body> </html> henkan2.php <?php $str=$_POST['UKETORI']; echo str_replace("です。","だよん。", $str) . "<br>\n"; echo "<br>\n"; echo mb_ereg_replace("です。","だよん。", $str) . "<br>\n"; echo "<br>\n"; ?> フォームに です。 という文字を入れたら変換されて だよん。 と表示さしたいのですが、上の2つで相違がでました。なぜなんでしょうか。 henkan.php では変換されませんでした。 henkan2.php では変換されました。
- ベストアンサー
- 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
- 文字列内の\nで改行表示させるための置換
すでに他のかたがNo.7770 でなさった質問によく似ていますが、私の場合と微妙に違いますので、質問させてください。たとえば: $data='i.(h, s) \n1. (馬が)速足(はやあし)で走る \n2. (s)[口]急いでいく, 小走りに走る' この$data 内の「\n」を<Textarea>に改行して表示したいので、文字列置換を $data = ereg_replace("\n", "<BR>", $data); とか $data = ereg_replace("\\n", "<BR>", $data); とか $data = ereg_replace("/\\n/", "<BR>", $data); やってみてますが、どうしもPerl の場合には成功した: $data=~ s/\\n/\n/g; と同じ結果が得られません。表示の末尾に<BR>が出たり、\nのままだったりします。何度も行なわれているような初歩的質問ですが、お願いします。
- ベストアンサー
- PHP
- 改行コードの<BR>への変換がうまくいきません。
はじめまして よろしくお願いします。 仕事でPHPを触れはじめたところです。 textarea タグで入力されたものをMysqlに保管し、 また表示するというようなものを作ろうとしています。 困っているのは Mysqlがどうのではなくその登録前に 改行コードを <br>タグ に変換をかけておこうというところで躓いています。 セッションを開始しておいてFormタグからの値を 次のページで受け取っています。 ここの過去ログ等を参考にしてみたのですが... $_SESSION['e_biko'] = htmlspecialchars($_POST['biko'] , ENT_QUOTES) ; $tmp_biko = ""; $tmp_biko = str_replace("\r\n", "\r", $_SESSION['e_biko']); $tmp_biko = str_replace("\r", "\n", $tmp_biko); $_SESSION['e_biko'] = str_replace("\n", "<br>", $tmp_biko); このあとでechoを使って$_SESSION['e_biko'] を表示させています。 しかし改行しないんです。<BR>タグへの変換ができておらず、表示されたHTMLのソースコードを見ると改行コードがそのまま出力されています。 HTML及びPHPの文字コードはEUCで記述しています。 開発及び確認はWindows・IE6で行っています。 何か考えられる原因、あるいはバグかあるでしょうか? ちなみに下記でも駄目でした。 $_SESSION['e_biko'] = preg_replace("/\r\n|\r|\n/", "<br>", $_SESSION['e_biko']); お分かりになられる方おられましたらよろしくお願いいたします。
- ベストアンサー
- 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
- ereg_replace関数に関して
教えて下さい。 プログラム上でereg_replace関数を多数使用しています。 この関数は、PHP 5.3.0以上では使えない事がわかり、他の関数に切り替えたいと考えて いますが、書き方がわかりません。 以下の記述をPHP 5.3.0以上で動作させる為には、どのように記述すれば良いでしょうか? 《現在の記述》 $dest=ereg_replace('^', '>' ,$dest); $dest=ereg_replace("\n", "\n>" ,$dest); $dest = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $src); 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。
- ベストアンサー
- 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
- csv内の改行を削除
フォームから送られてきた文章の 改行を<br />へ変換したいのですが、 $comment_a = ereg_replace("\n","<br />",$comment); としても a<br /> b<br /> c となってしまいます。 a<br />b<br />c としたいのですが、どうしたらよいのでしょうか。 $comment_b = str_replace("\n", "", $comment_a); を追記したのですが、うまくいきませんでした。
- ベストアンサー
- PHP
- textarea内のタグを反映させたいのですが
http://okweb.jp/kotaeru.php3?q=984300を参考に 改行を犠牲にして自動リンクを利用できるようにしたのですが、 HTMLの一部に編集内容を反映したいため FONTタグ等も利用したいんです。 何か良い方法はありませんでしょうか? よろしくお願いします。 <?PHP 文字制限のため省略ですが参考元と同様です。 ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <textarea name ="data1" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data1']); ?></textarea><br> data2の変更 - <textarea name ="data2" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data2']); ?></textarea><br> data3の変更 - <textarea name ="data3" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data3']); ?></textarea><br> <input type="submit" value="送信"> </form> <table> <tr><td>data1</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data1']); ?></td></tr> <tr><td>data2</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data2']); ?></td></tr> <tr><td>data3</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data3']); ?></td></tr> </table> </body> </html>
- 締切済み
- PHP
- 質問者がアマゾンで特定の商品を購入しようとした際に表示される「●芝(●SHIBA)のストア」について疑問がある。
- 購入した商品のカートを確認すると、「●芝ストア」とは関係のない地方の住所の名前も知らない店舗名が表示されている。
- これらの表示はどのような仕組みで行われているかについて質問している。
お礼
親身で親切でご丁寧な回答に感謝します。ありがとうございました。 Sun Apr 14 08:57:15 JST 2002
補足
kusukusuさま、おはようございます。 アドバイスに感謝します。 >http://php.zyprexia.com/manual/ja/function.nl2br.php >そう言う仕様ではないですか? 早速のご指摘に感謝します。NL2BRの文字で「置換」処理だとばかり考えておりました。置換ではなく「挿入」処理なのですね。すると、PHPスクリプト内で JavaScriptの変数に文字列としてクライアントに戻すような場合は、最初からNL2BRだけでは無理があり、ereg_replace を利用することが正解と認識するべきですね。悩みが1つ無くなりました。ありがとうございます。(早計かな) >これは分かりません。私の環境ではこれでうまくいきます。 >ものすご~く当てにならない予測ですが、文字コードは大丈夫でしょうか? >内部設定EUC-JPなのにSJISを使っていないか調べてみてください。 PostgreSQLへの書き込み以前での確認ですので PostgreSQLは無視したとして、LinuxですのでEUCを基本にしています。PHP3では /usr/local/lib/php3.iniでi18n関連のエンコード/デコード定義関数があったと思うのですが、PHP4ではインストールのまま利用しております。htmlでの METAタグによる文字コード宣言は故意に廃止し、yahooさんのポリシールールと同様に、EUC独自の漢字をhtmlファイル先頭に埋め込みブラウザーにEUCを認識させています。Linux内のHTMLファイルもEUCで書き込んでおります。 >少なくとバグではないと思います。 ># 聞いた事ありませんから。 >また、./configureはどのようなオプションを付けたのでしょうか? そうですか。やはり固有のトラブルですか。レポートがありませんので、コンパイルミスなのですね。ガックリ(^^); イントラネット用 Apacheと言う事でSSLを無用とし、デーモン常駐ではなく、ポート80コールでhttpdを必要な時だけ立ち上げることにし、Apache の --enable-module=so をコンパイル時に選択していません。PHP4のコンパイル時のオプションは以下の通りです。 ../configure --enable-jstring \ --enable-mbregex --enable-iconv --with-pgsql \ --enable-trans-sid --enable-track-vars です。PHP3の時は技術評論社「改訂版 PostgreSQL完全攻略ガイド」石井達夫氏を参考にし何も問題はなかったです。PHP4は秀和システム「PHP4でカンタンWebDB構築ガイド」初版ですが、書かれている通りには上手く出来なかったです。 宜しければ、kusukusuさまのご利用中の PHP4のバージョンと configure 時のオプションを教えてはいただくか、参考にされたWebサイトを教えて戴けませんか?(甘え過ぎかも知れません) NAMAZUやKAKASHIは現在は利用していませんが、将来的にはインストールしたいです。Apacheのバージョンはインターネット側のSSL版と同じバージョンにしておきたいので特にApacheのバージョンアップは考えていないのですが、必要があればコンパイルの再実行は実施したいと思います。PostgreSQLも、バージョンアップしたいですが、DBデーターの移行に問題が無いか別システムで実験してから行います。PHP4と日本語化パッチのインストール情報があるWebサイトをご存知ではないでしょうか?(これはなんなら別スレッドで質問してみます) >携帯モバイルの場合、ものすごく影響が出るのが文字コードです。 >その当たりもう一度当たってみた方がいいかもしれません。 >user_agentを拾って、相手のブラウザを判断し、普通のパソコンからのアクセスの場合はEUC-JPそのままで表示。 >携帯からのときは、SJISにエンコード。 >この点は気を付けましょう。 ご指摘に感謝いたします。注意します。ありがとうございます。また、質問のようになってしまいましたが、お暇な時に見てやって下さい。(^^)