2012-01-13 8 views
0

私は自分のページの管理者がログインし、さまざまなニュースを投稿するCMSを持っています。書式付きテキストを表示

ページはギリシャ語ですので、私はutf-8エンコーディングを使用しています。

彼らはニュースレターをテキストエリアに書き、投稿をヒットすると次のPHPスクリプトがテキストを作成してmysqlデータベースに保存できるようにします。

$text = $_POST['text']; 
$text = htmlentities($text, $quote_style = null, $charset = "UTF-8", $double_encode = null); 
$text = mysql_real_escape_string($text); 

、ユーザーがページに移動するときに、私は、データベースからテキストを取得し、私はこのような何かに見えるwhickビューファイルが含ま:

<p><?php echo $text; ?></p> 

をしかし、テキストが表示されたときに、それがテキストのブロックのように見えますが、改行はありません。

記事の投稿者が入力したテキストを正確に表示するにはどうすればよいですか?

私がhtmlentitiesを使用している理由は、サイト上のニュースを投稿する人々が実際のhtmlコードを投稿できるようにすることを本当に望んでいないからです。それが良い考えでない場合は、私に知らせてください。

は私も使ってみました:

$text = $row['text']; 
$text = html_entity_decode($text, $quote_style = null, $charset = "UTF-8"); 

テキストを表示するビューを呼び出す前に、しかし、運が同様。

答えて

1

あなたはHTML <br />改行を挿入するnl2br()が必要:

<p><?php echo nl2br($text); ?></p> 
0

試して。

$text = $_POST['text']; 
$text = htmlentities($text, null, "UTF-8", null); 
$text = nl2br($text); 
$text = mysql_real_escape_string($text); 

それはあなたがentitesに「<」と「>」を変更する実際のテキストだ破ることができるので、あなたはにhtmlentities後にそれを行う必要があります。ユーザーは、フォームに行を何かに入ると

&lt;/&gt; 
+0

データベースに書き込む前に改行を置き換えるのは悪い考えです。そのテキストを編集する場合は、それをテキストエリアに出力する前に '
'を置き換える必要があります。 – Corubba

+0

@BloodyWorldあなたが正しいです。 – WoLfulus

1

改行はプレーンテキストとしてフォーマットされているため、改行はフォームに改行として表示されます。

ブラウザがテキストを解析するとき、テキスト改行は気にしません。気になるのはHTML改行だけです。したがって、通常のテキスト改行をHTML改行に変換する必要があります。

これはnl2brを使用して行うことができます。

<p><?php echo nl2br($text); ?></p> 
+0

改行は実際には保存されますが、ブラウザはそれらを認識せず、上記の関数を使用するだけでそれができますか? – ppp

+0

はい。これは、生成されたページのソースコードを表示することで確認できます。そこには、改行がまだ存在することがわかります。 – kba

-1

<pre>タグの代わり<p>タグを使用してください。

+0

これはまた、ほとんどのブラウザではデフォルトでappthanceを変更します(つまり、CSSを使用してテキストを再フォーマットする必要があることを意味します)。文脈によってはセマンティクスで正しくない可能性があります。 – Connum

0
$text = $_POST['text']; 
$text = mysql_real_escape_string($text); 

...save into database 

$text = htmlentities($text, $quote_style = null, $charset = "UTF-8", $double_encode = null); 

... show in view 
0

これは実際のコードですか?

htmlentities($text, ENT_COMPAT | ENT_HTML401, 'UTF-8'); 

あなたが仕事に改行を希望している場合:あなたが定義している、そしてそうのようなデフォルトとしてオプションを残すことが有益であることを何が起こっているかのパラメータを指定する必要はありません

$text = htmlentities($text, $quote_style = null, $charset = "UTF-8", $double_encode = null); 

テキストエリアに入力した後、nl2brと呼んで、新しい行をHTML改行に変換する必要があります。これには、同じようにhtmlentitiesにあなたの呼び出しの後に実行する必要があります。

$text = nl2br(htmlentities($_POST['text'], ENT_COMPAT | ENT_HTML401, 'UTF-8')); 
$text = mysql_real_escape_string($text); 
+0

代理演算子が割り当てられた値を返すため、彼の呼び出しが機能します。それを行うための正しい方法ではありませんが、時にはそれは有用ではあるが混乱することがあります。 like:** call($ a = 1234); if($ a == 1234){echo "私はここにいる"; } **これは1234を "呼び出し"関数に渡し、私が間違っていない場合に "if"を入力します。 – WoLfulus

+0

@WoLfulus PHPが壊れた時代に戻って考える良い点。しかし、それでもデフォルトフラグを残しておくのは良いことではありません。更新しました。編集:はい間違っていない、var_dump(($ a = 'c')); (文字列) 'c'を返します。 –

+0

My edtor(bluefish)には、すべての変数がNULLとして渡された関数が事前に入力されています。私は値を変更していない。私はあなたが言及する構文のhtmlentitiesドキュメントを検索します。 – ppp

1

hereとしてnl2br機能を使用してください。

<p><?php echo nl2br($text); ?></p> 
関連する問題