phpな休日 BBS sitemap
改行の処理

FORMから改行を含んだ文章を送ったり受け取ったりする場合はどうしたらよいでしょう。

<form action="./1.php" method="POST">
<textarea name="data" cols="40" rows="4"></textarea>
<input type="submit" value="送信">
</form>

スクリーンショット画像

このようなフォームのテキストエリア内に改行を含む文章を打ち込んで [送信] した場合、

<?php
if (isset($_POST["data"])) { //もしPOSTに [data] があれば
$data = $_POST["data"]; //POSTのデータを変数$dataに格納
if( get_magic_quotes_gpc() ) { $data = stripslashes("$data"); } //クォートをエスケープする
$data = htmlspecialchars ($data); //HTMLタグ禁止
$data = mb_strimwidth ($data, 0, 200, "", "UTF-8"); //長いデータを200バイトでカット
print $data;
}
?>

このように受け取るとどうなるでしょう。

実行

テキストエリア内での改行はデータとしては送られますし、実際ログに記録すれば
 phpな休日
 管理人haku
 http://www.p-ho.net/
のように3行に記録されます。
ですが、WEBページにそのまま表示させると

phpな休日 管理人haku http://www.p-ho.net/

上記のように一行表示になります。
ログに記録する際は逆に行が変わってしまってはまずいので、POSTから受け取った改行コードを <br> に変換する必要があります。

$data = str_replace("¥r¥n", "¥r", $data); //Windowsの改行コードを置き換え
$data = str_replace("¥r", "¥n", $data); //Machintoshの改行コードを置き換え
$data = str_replace("¥n", "<br>", $data); //¥nを<br>に置き換え

と、3行分の処理を追加して(str_replace は文字列を置き換える関数です)

<?php
if (isset($_POST["data"])) { //もしPOSTに [data] があれば
$data = $_POST["data"]; //POSTのデータを変数$dataに格納
if( get_magic_quotes_gpc() ) { $data = stripslashes("$data"); } //クォートをエスケープする
$data = htmlspecialchars ($data); //HTMLタグ禁止
$data = mb_strimwidth ($data, 0, 200, "", "UTF-8"); //長いデータを200バイトでカット
$data = str_replace("¥r¥n", "¥r", $data); //Windowsの改行コードを置き換え
$data = str_replace("¥r", "¥n", $data); //Machintoshの改行コードを置き換え
$data = str_replace("¥n", "<br>", $data); //¥nを<br>に置き換え
print $data;
}
?>

このように受け取ります。

実行

この処理により、変数 $data の値は

phpな休日<br>管理人haku<br>http://www.p-ho.net/

このようになります。

2014.2.4 last edit

Produced by haku