• ベストアンサー

空行を<br />に置換したい

今、ファイルの中身を読み込み、それを処理したいものがあります。 処理する過程で、 空行(スペース、タブしかない行も含む)を<br />に置換したいのですが、上手くいきません。 ex) 処理前 あいうえお ←半角スペース2個あると過程 か きくけこ さしせそ 処理後 あいうえお <br /> か <br /> きくけこ <br /> さしすせそ 現在、やってるスクリプトです。 $str = preg_replace("/^\s$/", "<br />", $str); これだと出来ません・・・。 (このままだと<br />に置換するとその行が改行され ませんでしたね><;) どうすると実現出来ますでしょうか?ご教示下さい。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

こんな感じでしょうか・・ $str = preg_replace("/(^|\n)[\s]+(\n|$)/", "\\1<br />\\2", $str);

naktak
質問者

お礼

ありがとうございます。私も色々試したところ、そんな感じになりました!

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

#2の方の回答のようにややこしいことせんでも 修飾子一個で解決しますよ。 $str2 = preg_replace("/^\s+$/m", "<br />", $str); print($str2);

naktak
質問者

お礼

ありがとうございます。 試した所、処理される所はいいみたいだったのですが、何故か<br />に置換されず、、、、でした。 後でじっくり確認してみようかと思います。

  • fire--
  • ベストアンサー率49% (146/293)
回答No.1

マニュアルにでてますが、以下では? >nl2br >(PHP 3, PHP 4 , PHP 5) > >nl2br -- 改行文字の前にHTMLの改行指定文字を挿入する >説明 >string nl2br ( string string) > >stringに含まれるすべての改行文字の 前に '<br />' を挿入して返します。

naktak
質問者

お礼

すみません、それだと あいうえお かきくけこ が あいうえお<br /> かきくけこ になってしまうのでNGです。 色々試した結果、自己解決しました。

関連するQ&A

  • ヒットする初回のみ置換する方法

    あいうえおかきくけこあいうえおあいうえお という文字列があった時、 初回の「あいうえお」のみ空に置換して かきくけこあいうえおあいうえお としたいのですが、str_replace()だと全部置換されてしまいますし、 preg_replace()やmb_ereg_replace()ではうまく置換されません。 対象とする文字列は、実際はHTMLタグやマルチバイトが混じっています。 置換するべき文字列は、全く同様のものが対象文字列内にも必ず含まれています。 preg_replace()やmb_ereg_replace()でも可能なのかもしれませんが、 どうやればいいのか分かりませんでした。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • PHPのエスケープシーケンスについての質問です。

    PHPのエスケープシーケンスについての質問です。 下記のコードで改行コードを<br>に置換し、結果を画面に出力しました。 $text = "あいうえお\\nかきくけこ\nさしすせそ"; $text = str_replace("\n", "<br>" , $text); echo $text; 実行結果は下記になりました。 あいうえお\\nかきくけこ さしすせそ 私の予想では、\\nが\<br>に置換され、下記になるかと思いました。 あいうえお\ かきくけこ さしすせそ なぜ\\nは\<br>に置換されず、そのままだったのでしょうか?

    • ベストアンサー
    • PHP
  • 文字列前後の「全角空白/半角空白/改行文字」を取り除く

    PHPで、「文字列の前後に付加されている全角空白/半角空白/改行文字を取り除く」 という処理をしたいのですが、以下のように置換処理を書くとうまくいきません。 $after = preg_replace('/^[  \r\n]*(.*)[  \r\n]*$/u', '$1', $before); // [  \r\n]→[半角空白、全角空白、改行文字]です どううまくいかないのかといいますと、入力として半角スペース+全角文字が入ったときに、全角文字の先頭文字が文字化けしてしまいます。 たとえば、 <半角スペース>あああ をこれにかけると、 <よくわからない文字>ああ となります。 以下のように2回に分けてみると、正常に動きます。 $tmp = preg_replace('/[  \r\n]*$/u', '', $before); $after = preg_replace('/^[  \r\n]*/u', '', $tmp); 最初のように1回の正規表現による置換で済ませたい場合、 どのように書くのが適切なのでしょうか? PHPのバージョンは5.2.3です。

    • ベストアンサー
    • 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
  • 正規表現でpreg_系を使ってタグ内は置き換えないようにする方法

    正規表現でpreg_系を使って、半角スペースを&nbsp;に置き換える処理をしたのですが、タグ内のスペースも&nbs;に置き換わってしましました。 タグ内は置き換えないようにするにはどのようにしたら良いでしょうか? データは複数行渡っています。以下はタグが置き換わるので、逆にタグでないものを置き換えたいです。 <?php function test_call($matches){ return str_replace(" ","&nbsp;",$matches[0]); } $data = <<< EOT この横は変換 します。 <a href="http://www.yahoo.co.jp/" target="_blank">タグの半角スペースは変換せず、 この横は変換する。 </a> このタグも変換してはいけません。< br/> EOT; $data = preg_replace_callback('/<("[^"]*"|\'[^\']*\'|[^>])*>[ ]?/', "test_call", $data); var_dump($data); ?>

    • ベストアンサー
    • PHP
  • 1行の空行を設けたのに、2行の空行ができてしまうのは何故でしょうか?

    Windows XPでOutlook Express(Ver 6.0)を使用しています。 1行の文字数を、半角ベースで72文字(全角ベースで36文字)に 設定していますが、実際には全角ベースで30文字で、意識的に改行 キーを押してメールを書いています。 ところが、時々ではありますが、1行の空行を入れた筈なのに、送信 前に、「送信トレイ」で確認すると、2行の空行になっていることが あります。修正画面にして、余分な空行を削除して、「送信トレイ」 に入ったものを見ると、また、2行の空行になっています。何度やっ ても同じ現象が起きます。これは何が原因しているのでしょうか? この場合の解決策がありましたら、教えてください。

  • 改行コードの<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
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • ms_send_mail関数で改行(\n)すると本文に空行が出る

    始めまして。PHP初心者です。 現在PHP5でのms_send_mail関数を使ってメール送信を行う携帯向けページを制作しています。 送信ページでshift_jisへの文字エンコードも問題なく完了し、長い文章も無事に送信・受信していますが、 「\n」を使って改行を命令した部分に受信側で一行分の空行が入ってしまいます。 例えば送信メールの本文に --------------------------------- あいうえお \n かきくけこ \n さしすせそ \n --------------------------------- と記述し、メール送信。それを受信側で見ると ---------------------------------- あいうえお かきくけこ さしすせそ ---------------------------------- と‥行の間に空行が一行入ってしまいます。理想としては ---------------------------------- あいうえお かきくけこ さしすせそ ---------------------------------- と言う風に出力したいんですが‥‥ gooも含め半日ほどネット上を調べたのですが、空行を消す(または入れない)方法がどうしても見つかりません。 この空行を消す方法をご存知のお方がいらっしゃいましたらご教授願えませんでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPの空白除去

    PHP5において 半角の前後空白を削除する関数trimは理解してます。 文字列中にある半角及び全角の空白を除去するには 文字列置換用の関数、例えばstr_replaceを使って置換すれば 全て空白を除去出来ます。 例: ---------------------------------- $string=" あ い う え お "; $all=" ";//全角スペース $half=" ";//半角スペース $no="";//削除用変数 $string=str_replace($all,$no,$string); $string=str_replace($half,$no,$string); ---------------------------------- 最後の2行を書けば置換が出来るのですが、問題はこの二つの関数をまとめてクラス化し、再利用したいと思っています。 クラスの作成方法及び使用方法がまだまだ理解していないので、困ってます。どなたかお力になって頂ければ幸いにございます。

    • ベストアンサー
    • PHP

専門家に質問してみよう