[PHP]formのtextareaの改行を消せない

このQ&Aのポイント
  • formのtextareaに改行して数行のデータを入れ、それを改行毎にexplodeで分けて居るのですが、1個1個のデータから改行の情報が消えません。
  • textareaに入力されたデータを改行ごとに分けるためにexplode関数を使用しているが、改行の情報が消えずに半角スペースが残る問題が発生している。
  • 改行(半角スペース)が残っているため、文字列の長さを判定する際に不都合が生じている。
回答を見る
  • ベストアンサー

[PHP]formのtextareaの改行を消せない

[PHP]formのtextareaの改行を消せない formのtextareaに改行して数行のデータを入れ、それを改行毎にexplodeで分けて居るのですが、1個1個のデータから改行の情報が消えません。 textareaに 1234 2345 3456 $data=explode("\n",$_POST[textarea]) で、dataに配列として入れて、 echo $data[0] . "," . $data[1] . "," . $data[2]; と表示させてみると、 1234 ,2345 ,3456 と4ケタの数字のあとに半角スペースが入ります。 HTMLソースで見ると改行されているようです。 str_replace("\n","",$data[0]) とやっても、消えません。 この改行(半角スペース)があるため、 if (mb_strlen($data[0])==4) で、Trueにならなくて困っています。 if (mb_strlen($data[0])==4 or mb_strlen($data[0])==5) とすることで解決は出来るのですが、そのほかでも使用したいので、出来れば最初からこの改行(半角スペース)を消したいです。 よろしくお願いします。

  • macus
  • お礼率76% (331/433)
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

ブラウザの実行されているOSによって、改行コードが異なるので、そのせいでしょうか。 linux系列は \n , windowsは \r\n , MACは \r $data=explode("\n",$_POST[textarea]); たぶん、windowsから送信されたデータだと \r が後ろに残っちゃうのでしょうね MAC への対応も考えると正規表現を使うほうがいいかもしれません。 $data=preg_split('/[\\r\\n]/',$_POST[textarea],null, PREG_SPLIT_NO_EMPTY); // PREG_SPLIT_NO_EMPTY : 空文字列で無いものだけにする

macus
質問者

お礼

ありがとうございます!!! お陰で解決できました!! \rはそういう意味だったんですね~。たまにサンプルで書いてあったので気になって居ました^^

関連するQ&A

  • 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
  • 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
  • explode時の改行コードでtrim以外の方法

    aaa bbb ccc というテキストデータ(改行あり)を読み込み、explodeで配列に入れる操作を行ったのですが、cccのところで改行コードも代入されてしまいます。trimでとれたのですが、毎回このような事を行うのは汚く感じるのですが、他に方法はありませんでしょうか? よろしくお願いいたします。 <?php $data = file("./a.txt"); $aa = explode( " ", $data[0] ); echo strlen($aa[0])." "; echo strlen($aa[1])." "; echo strlen($aa[2])."<br>"; echo $aa[0]." "; echo $aa[1]." "; echo $aa[2]."<br>"; $ab=trim($aa[2]); echo strlen($ab)."<br>"; ?> 実行結果 3 3 5 aaa bbb ccc 3

    • ベストアンサー
    • PHP
  • textareaの入力データで無駄な改行が…

    textareaでデータ入力し、perlで拾うと無駄に改行が入ってしまいます。 <textarea name="textarea_data"> a a a </textarea> これをPerlで拾って表示させると a a a と表示されてしまいます。 改行が無駄に一つ入ってしまっているのですが、考えられる原因は何でしょうか? print "$FORM{'textarea_data'}"; で表示させています。\n等は入れていません。

    • ベストアンサー
    • Perl
  • textarea内での改行がechoで反映されない

    $str = (textareaにてフォーム送信された内容) だとして、echo $str;としてブラウザで確認してみると改行が反映されてません。 ちなみに、$strをメール送信して、受信メールで確認したところ改行はされていました。 どなたか解決策をご存知の方いらっしゃいましたらご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • php 指定文字列以降の削除

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

    • ベストアンサー
    • PHP
  • TEXTAREA内の改行位置をinnerHTMLで反映させたい

    例えば、 <HTML> <HEAD> <SCRIPT> function send(){ var message = f1.message.value var str = '<HTML>\n<HEAD>\n</HEAD>\n<BODY>\n' str += ''+ message +'\n' str += '</BODY>\n</HTML>' document.frame1.document.body.document.body.innerHTML = str } </SCRIPT> </HEAD> <BODY> <FORM name="f1"> <TEXTAREA rows="10" cols="40" name="message" onChange="send()"></TEXTAREA> </FORM> <IFRAME name="frame1" id="frame1" width="90%" height="350"></IFRAME> </BODY> </HTML> このような記述をして、テキストエリア内に文字を数行にわたって書き込んでも改行はされません。 どのようにすれば改行されるようになりますか? innerHTMLのところをinnerTEXTとして改行位置に<BR>タグが入るようにするのでもかまわないのですが、、、 どなたかお分かりになる方、ご教授願います。

  • textareaの文章をファイルに書き込む方法

    PHP: 4.4.4です。 <TEXTAREA name="ireru" cols="50" rows="20"></TEXTAREA>に 1.html 2.html 3.html 4.html 5.html ・・・ 20.html と入力し、書き込み形式 1.html\t2.html\t3.html\t4.html\t・・・20.html\t\n 上記の形でlogファイルに書き込みたいのですが、上手くいきません。 (20個以上は書き込めない仕様にしたい) $ireru=htmlspecialchars($_POST['ireru']); $ireru=str_replace("\r\n","\t",$ireru); $ireru=str_replace("\r","\t",$ireru); $ireru=str_replace("\n","\t",$ireru); $ireru=str_replace("\t","",$ireru); $ireru=str_replace(",","\t",$ireru); 改行を\tに置換しているのですが全て\n扱いになってしまいます。 ファイルの内容(5行) $aaa\n $bbb\n $ccc\n $ireru\n (ここに上記の書き込み形式) $ddd・・・ という感じで$***を1行ずつ入れてファイルに書き込みたいのですが、 普通なら5行で済むはずが、24行になってしまいます。 wでfopenしてdata="$aaa\n$bbb\n$ccc\n$ireru\n$ddd\n";でfputsしています。 もうちょっとでいけそうな気がするのですが、もうちょっとが分かりません。置換の設定に問題がありそうな気はするのですが・・・。 ご教授ください。

    • 締切済み
    • 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
  • 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

専門家に質問してみよう