1

ユーザーが bbcode を使用して他の人を引用できるフォームがあります。誰かが引用ボタンを押すと、テキストエリアの値は次のようになります:

[quote user=User date=1348246887 post=301]
User post text
[/quote]

そして今、ブロックに変換する私のコードは次のとおりです。

$post = preg_replace("/\[quote user=(.*) date=(.*) post=(.*)](.*)\[\/quote\]/Uis", "<div class=\"quote\"><p>Quote by \\1 at time : \\2<a href=\"index.php?subject=".$_GET['subiect']."&post=\\3\">&nbsp;</a></p><span>\\4</span></div>", $post);

現在までの時間を preg_replace に変換するにはどうすればよいですか? \2 の値が設定されていないため、preg_replace では実行できません。

4

1 に答える 1

2

htmlentitiesこのようなことを試してみてください(リンク内に「テスト」を追加したので、リンクが表示されます-何が必要かわかりませんが、非改行スペースではリンクが表示されません.)「サブジェクト」$_GET 変数 (おそらく「サブジェクト」のつもりだったのでしょうか?) には、マークアップまたは引用符が含まれていました。そしてもちろん、必要に応じて date() 文字列の最初の引数をカスタマイズできます。最後に、\s+より柔軟な空白を可能にするために追加しました。また、区切り文字「/」を「@」に変更したため、正規表現内で「/」をエスケープする必要はありません。

古い PHP との互換性のために更新されました。

<?php

$post = <<<HERE
[quote user=User date=1348246887 post=301]
User post text
[/quote]
HERE;
// ]  (just adding this comment to fix SO syntax colorer)

function replacer ($matches) {
    return '<div class="quote"><p>Quote by '.$matches[1].' at time : '.
        date('Y m d', $matches[2]).'<a href="index.php?subject='.
        htmlentities($_GET['subiect'], ENT_COMPAT, 'UTF-8').
        '&post='.$matches[3].'">test&nbsp;</a></p><span>'.
        $matches[4].'</span></div>';
}

$post = preg_replace_callback(
    '@\[quote\s+user=(.*)\s+date=(.*)\s+post=(.*)](.*)\[/quote\]@Uis',
    'replacer',
    $post
);

var_dump($post);

?>
于 2012-09-22T00:10:39.123 に答える