0

誰かがこの問題を手伝ってくれませんか。

ユーザーからのメッセージを表示しようとしているだけです。メッセージはテキストエリアからデータベースに届きます。私の問題は、メッセージを入力して段落に分割してフォーマットすると、そのフォーマットで表示されず、1 つの長い段落として表示されることです。

このような。

ドキュメントの全体的な外観を変更するには、[ページ レイアウト] タブで新しいテーマ要素を選択します。クイック スタイル ギャラリーで使用できる外観を変更するには、[現在のクイック スタイル セットを変更] コマンドを使用します。\r\n\r\nテーマ ギャラリーとクイック スタイル ギャラリーの両方にリセット コマンドが用意されているため、ドキュメントの外観を現在のテンプレートに含まれている元の状態にいつでも復元できます。

nl2br() と strip_tags() を試しましたが、まだうまくいきません

検証メッセージからのコード。

// Check for message
if ( !empty ( $_POST['message'])) {
    if ( mb_strlen ( $_POST['message'], 'UTF-8') <= 20 ) {
        $reg_errors['message'] = 'Your message must be greater than 20 characters';
    } else {
        $message = mysqli_real_escape_string($dbc, $_POST['message']);
    }   
} else {
    $reg_errors['message'] = 'Message: This field is required.';
}

これは、データベースからメッセージを選択するときに使用するコードです

$message= $row['message'];
$message= nl2br(strip_tags($message));

$message をエコーすると、上記のような段落が出力されます。

4

2 に答える 2

2

データベースにデータを追加するときに過度のエスケープを行っています。
準備済みステートメントを使用している場合は、コードから mysqli_real_escape_string() 呼び出しを削除するだけです。
そうしないと、2 回実行していることになります。つまり、それが発生する場所を見つけて、余分な mysqli_real_escape_string() 呼び出しをコードから削除する必要があります。

于 2013-02-09T14:34:27.083 に答える
0

私の理解では、使用mysqli_real_escape_string()することでバックスラッシュをエスケープしているため、たとえばトランザクション時に に\r\nなりますが\\r\\n、それらが Javascript によってすでにエスケープされている場合、トランザクション中に終了するのは、次のよう\\\\r\\\\nに html に変換されることです。

  1. リテラルのバックスラッシュ
  2. r
  3. リテラルのバックスラッシュ
  4. n

そのため、データベースに追加する前に、それらを適切な文字に置き換えたい場合があります。preg_replace()strtr()、 …などのさまざまな組み込み関数から pic できることを行うstr_replace()</p>

于 2013-02-09T14:18:23.497 に答える