0

まず初めに、私はまだ初心者であることをお詫び申し上げます。

学習目的でブログ エンジンを作成していますが、コメントを一覧表示すると、キャリッジ リターン (Enter キーを押す) などのエスケープ文字がデータベースに正しく表示されますが、コメントを表示するときは空白文字のみが表示されることに気付きました。

PostgreSQL 8.3 を使用しています。

データベース エントリの例を次に示します。

fema=> select * from comments where id = 54;
-[ RECORD 1 ]-------------------------
id       | 54
authorid | 1
text     | This new line won't show.\r
        : No\r
        : \r
        : new\r
        : \r
        : \r
        : \r
        : lines.
time     | 1341417673
postid   | 15
answerid | 0

ここで、var_dump() の表示内容を確認できます。

string(50) "This new line won't show. No new lines." 

これは私がデータを取得する方法です:

$stmt = db::$db->prepare("select comments.id as commentid ,authorid,text,time,postid,answerid,users.* from comments left join users on users.id = comments.authorId where postid = :postId");
            $stmt->execute(array('postId' => $_GET['p']));
        $commentRslt = $stmt->fetchAll();

次に、foreach を使用してそれらを繰り返し処理し、置き換える必要があるものを特定するために使用しているマークを置き換えます。

$currComment = str_replace('{{{cms:comment:text}}}', $commentRslt[$key]['text'], $currComment);

これは、DB に新しいコメントを挿入する方法です。

$stmt = self::$db->prepare('INSERT INTO comments (authorId, text, time, postId, answerId) VALUES (:authorId, :text, :time, :postId, :answerId)');
$stmt->execute(array(   'authorId' => $_SESSION['userId'],
                        'text' => str_replace(array('<','>'), array('&lt','&gt'), isset($_POST['newCommentArea']) ? $_POST['newCommentArea'] : $_SESSION['newCommentArea']),
                        'time' => time(),
                        'postId' => isset($_POST['commentNew']) ? $_POST['commentNew' ] : $_SESSION['postId'],
                        'answerId' => $answerId));

コードサンプルが多くて申し訳ありませんが、問題がどこにあるのかさえわからないので、徹底したかったのです。

それで、誰でも問題を解決する方法を教えてもらえますか?どこで間違いを犯したかを教えていただければ。私は本当に手がかりがありません。

ありがとう。

4

1 に答える 1

3

ここで推測してください、しかし:

連続する空白は、HTML/ブラウザによって1 つのスペースに折りたたまれます。<br>改行を保持したい場合は、 を使用してタグに置き換えますnl2br

于 2012-07-04T16:31:02.063 に答える