人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpの質問です。
ホームページの記事を
PHPを使って簡単な更新をしようと思うのですが、
改行で困っています。

更新ページを用意して、そこにフォームを用意しています。
そこに書かれたものを別ファイルに書き込み、そのファイルを別ページが読みこんでいる形です。

まず入力のphpでは、
<?php
$filepath = "title.txt"; // ファイルへのパスを変数に格納
$string = $_POST['title'];// 書き込みたい文字列を変数に格納
if (isset($string)){
$fp = fopen($filepath, "w"); // 新規書き込みモードで開く wかr
@fwrite( $fp, $string, strlen($string) ); // ファイルへの書き込み
fclose($fp);
}
//ファイルへの書き込みは終了
?>

といった方法で別に置いているファイルに書き込みをさせています。
そのファイルを
<?php
require('title.txt');?>
で読み込みをさせています。
そのさいに最初の書き込みをしたファイルに改行をいれるにはどうしたらいいでしょう?
もちろん<br>とかけば改行できるのですが、できれば<>を使いたくないので、
なにか方法はないでしょうか?
たとえば\nを<br>に変換するとか、なにかお願いします。


●質問者: snoopy_japan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:FP pH PHP require String
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● うぃんど
●21ポイント

phpのMIMEタイプは自動的にhtmlにされてしまうので、

冒頭で「プレーンテキストです」と指示を送ることで対応したりします

<?php
 header("Content-type: text/plain");
 require('title.txt');

http://jp2.php.net/manual/ja/function.header.php


2 ● うぃんど
●21ポイント ベストアンサー

ポイント付きメッセージは届きましたでしょうか?

ご覧のページ内にある「コメント・トラックバックを表示する」にチェックを入れることを再び推奨しておきます

(質問者からの返信の欄は何度でも書き直しが出来るのですが、回答内容の書き直しや追記は出来ない仕様のためです)

【1】ヘッダーで対応する

2010-11-24 11:34:20 の投稿がこれなのですが、

出力する内容がテキストファイルのみの場合に有効な手となり、

この方法はページの一部として読み込む場合には適応されません

<?php
 header("Content-type: text/plain");
 require('title.txt');

【2】改行が生き残るタグで囲む

(1)textarea

(2)pre - textareaはform内で使うべきなのでpreを推奨

タグなどとして認識されてしまう文字があるのでhtmlspecialcharsを通してから出力する必要あり

<?php
 echo '<pre>';
 $lines = file('title.txt');
 foreach ($lines as $line_num => $line) {
 echo htmlspecialchars($line);
 }
 echo '</pre>';
<?php
 echo '<pre>';
 echo htmlspecialchars( file_get_contents('title.txt') );
 echo '</pre>';

http://www.htmq.com/html/pre.shtml

http://php.net/manual/ja/function.file.php

http://php.net/manual/ja/function.htmlspecialchars.php

http://jp.php.net/manual/ja/function.file-get-contents.php

※ fileは一行ずつ処理を分けたい場合に便利

※ file-get-contentsは一括処理したい場合に便利

【3】改行コードを
に置換する

<?php
 $lines = file('title.txt');
 foreach ($lines as $line_num => $line) {
 echo preg_replace( "/\r\n|\r|\n/", '<br>', htmlspecialchars($line) );
 }
<?php
 $file = file_get_contents('title.txt');
 echo preg_replace( "/\r\n|\r|\n/", '<br>', htmlspecialchars( file_get_contents('title.txt') ) );
◎質問者からの返答

返事がおくれてすみません、このはてなを使うのが初めてでお手数をおかけしました。

おかげで解決ができました。

htmlspecialcharsの関数も知らなかったので、とても助かりました。

また質問させてもらうこともあるかと思いますがよろしくお願いします。


3 ● a-kuma3
●14ポイント

<pre> もしくは <xmp> でくくる。

<xmp>
<?php require('title.txt');?>
</xmp>
◎質問者からの返答

とか忘れていました。


4 ● niwa-mikiho
●14ポイント

恐らくは html で表示するページ内に表示しようとしてるため、改行が改行として扱われないことにアタマを悩ましてるかと思います。



$handle = fopen("title.txt", "r");

$contents = fread($handle, filesize($filename));

fclose($handle);

$contents = ereg_replace("\r|\n|\r\n", "
\n", $contents);


で改行を
付きの改行として置き換えるのも手です。

◎質問者からの返答

ありがとうございます。


5 ● windofiuly
●20ポイント

回答投稿の取り消しが出来ないため、1つ無駄にしてしまう結果となり申し訳ありませんでした

ポイント付きメッセージを読むことが出来なかった場合や、回答を読んでもわからないことがあった場合やうまくいかなかった場合には返信欄やコメント欄に記入してください

(解決した場合にも返信やコメントいただけると嬉しいですし、後から見る人のためにもなると思いますので、よろしくお願いします)

以下、修正と蛇足です

【修正】

回答2の一番最後の例に含まれている「$file = file_get_contents('title.txt');」は動作テストの消し忘れです

一番最後の例では下記1行だけで済みます

echo preg_replace( "/\r\n|\r|\n/", '<br>', htmlspecialchars( file_get_contents('title.txt') ) );

【蛇足】

回答3のxmpは十年以上前に廃止となったタグです

現在でも多くのブラウザが対応していたりはしますが非推奨です

http://www.htmq.com/html/xmp.shtml

(HTML3.x時代までのやりかたです。HTML5.x時代に入りつつある現状で使うのはやめておいたほうがよろしでしょう)

回答4のereg_replaceは廃止予定のため非推奨です

http://jp2.php.net/manual/ja/function.ereg-replace.php

(php4.x時代のやりかたです。php6.x時代がそこまで来ている現状で使うのはやめておいたほうがよろしいでしょう)

以上、現在では適正でない部分もありますが、私の書いた例以外にも方法はまだまだあるということでご両人が書いてくださったのだと思います

【私信的なもの】

いつも簡潔でわかりやすい回答を書かれるid:a-kuma3さんですが今回のxmpは無いと思いますよ

(私の回答を見越してpreを書かなかったのでしょうけど、だとしたら、その目的は・・・)

id:niwa-mikihoさんは、もう少し新しい情報を仕入れれば、すばらしい回答者になられると思います

(古い情報を後から回答してどうしたいんだ?と最初に思いましたけどね)

◎質問者からの返答

補足までありがとうございます。

こんなに丁寧に教えていただき感激です。

またよろしくお願いします。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ