5

私は愚かな質問をしないようにしていますが、これは何らかの理由でうまくいきません。データベースから改行を含めたテキストを取得しています。すぐにエコーを使用する場合、これは出力です。

=== BOLD TEXT ===\nHere is some text.

これは私がそれを取得した方法です:

$row = $query->row();
$content=$row->course_content;

次のいずれも効果はありません.....

$content= str_replace(array("\r\n", "\r", "\n"), "<br />", $content); 
$content= str_replace("\n", " ", $content);
$content = nl2br($content);

ただし、元のステートメントに文字列でハードコーディングすると、

$content="=== BOLD TEXT ===\nHere is some text.";

パン!それは機能します...データベース入力の受け入れを拒否する理由についてのアイデアはありますが、手動の文字列では問題ありませんか?

完全なコード:

//Switch between these two:
$row = $query->row();
$content=$row->course_content;
$content="=== BOLD TEXT ===\nHere is some text.";
$content = str_replace(array("\r\n", "\r", "\n"), "<br />", $content); 
$content = str_replace("\n", " ", $content);
$content = nl2br($content);     
echo $content;
4

2 に答える 2

4

これを行う場合:

$row = $query->row();
$content=$row->course_content;
echo $content;

\n出力に印刷されたものが実際に表示されますか?それとも、実際に改行文字を出力しますか?

前者の場合、実際の改行文字ではなく、データベース文字列にエスケープされた改行があります。つまり、データベース文字列には\との 2 つの文字が含まれnていますが、これは改行ではありません。

代わりに(または完全に安全にするためにそれに加えて)この置き換えを試してください:

$content = str_replace(array('\r\n', '\r', '\n'), "<br />", $content); 

文字列の一重引用符の構文により、php は 2 つの文字を改行文字に変換しないため、\実際nにはデータベースの内容と一致するはずです。(\\n最初のスラッシュが 2 番目のスラッシュをエスケープし、改行にならないようにする を使用することもできます。)

編集:あなたの質問に答えるために、あなたが意味すると仮定するmysql_real_escape_stringと、はい、これは予想された動作でした。ドキュメントから:

mysql_real_escape_string()は、MySQL のライブラリ関数 mysql_real_escape_string を呼び出します。この関数は、\x00\n\r\ 、 '"および\x1aの前にバックスラッシュを追加します。

于 2013-03-07T17:35:59.167 に答える