0

そこで、コメント欄に「引用」システムを作ろうとしています。同様に、誰かが他の誰かを引用する場合、次のように表示する必要があります。

>quoted text

引用テキストは緑色になります。緑色のテキストが機能するようになりましたが、今の問題は、投稿が引用されると、引用されていないバージョンも次のように表示されることです。

>quote
quote

私のPHP:

<?php

include 'db.php';
$comment = mysql_query("SELECT * FROM posts");
while($row = mysql_fetch_assoc($comment))
{
$p_id = $row['id'];
$c_name = $row['name'];
$c_email = $row['email'];
$c_sub = $row['sub'];
$c_post = $row['post'];
$c_post = str_ireplace('>', "<span class=\"gtext\"><blockquote>$c_post</blockquote></span>", $c_post);
echo "<span class=\"sub\">$c_sub</span> <span class=\"postname\">$c_name</span> No.$p_id &nbsp; \n";
//echo "[a href=\"index.php?reply=$id\">Reply</a>]";
echo "<blockquote>$c_post</blockquote>";
echo "<hr>";
}
?>
4

2 に答える 2

1

あなたのstr_ireplace(...)行は文字を引用されたテキスト全体に置き換え>ますが、元のテキストは切り取られません.

1 つの方法は、次のように使用することpreg_replace(...)です。

$post = preg_replace('/^>(.*)$/m', '<span class="gtext"><blockquote>\{1}</blockquote></span>', $post);

> これは、および次のテキストと一致し、タグ内にラップされたテキストだけに置き換えられます。

別の方法は、正規表現なしで機能します。

if(0 === strpos('>', $post)) {
    $post = substr($post, 1);
    $post = '<span class="gtext"><blockquote>' . $post . '</blockquote></span>';
}

これにより、位置 0 の文字がチェックされ>、トリミングされ、投稿がタグでラップされます。
これは、全体$postが単一の qoute であるかどうかにかかわらず機能します。
このメソッドは、出現する文字を適切preg_replace(...)に置き換えます (改行までのテキストに一致します)。 式で使用される修飾子により、文字列全体ではなく、すべての行がチェックされます。>
m

于 2013-04-24T02:45:24.373 に答える
0

str_ireplace 呼び出しは '>' を探し、それを に置き換え"<span class=\"gtext\"><blockquote>$c_post</blockquote></span>"ます。そのため、その後に引用符が続きます。

これを修正するには、「>」の後の次の改行を探して保存し、改行の前と「>」の後の内容を削除してから、新しく保存された値を参照する代わりに、2 番目の引数で str_ireplace 呼び出しを呼び出します。 2 番目の引数。

http://php.net/manual/en/function.str-ireplace.php

于 2013-04-24T02:46:21.380 に答える