1

私は最近、BBコードを使用してリンクを入力する人々がそれらを操作できるという問題を発見しました。

それらは次のようなものを入力するためのものです。

[LINK=http://www.domain.com]example text[/LINK]

ただし、次のように入力して、リンクの色を赤にすることができます。

[LINK=http://www.domain.com 'span style="color:red;"']example text[/LINK]

これはそれを変換するコードです:

$text = preg_replace("/\[LINK\=(.*?)\](.*?)\[\/LINK\]/is", "<a href='$1' target='_blank'>$2</a>", $text);

他の誰かが非常によく似た問題の解決策を提供してくれましたが、彼らは私にこれについての新しい質問を始めてほしいと言っています。彼らのソリューションはただ適応する必要があります。私は自分で試しましたが、実際にそれを機能させることができません。 BBコードの操作を止める方法は?

4

3 に答える 3

2
preg_replace_callback("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is",
    function (array $matches) {
        if (filter_var($matches[1], FILTER_VALIDATE_URL))
            return '<a href="'.
                htmlspecialchars($matches[1], ENT_QUOTES).
                '" target="_blank">'.
                htmlspecialchars($matches[2])."</a>";
        else
            return "INVALID MARKUP";
    }, $text);

コールバックを使用してURLを検証し、忘れないでくださいhtmlspecialchars

于 2010-08-10T17:59:33.823 に答える
1

htmlspecialchars()最も簡単で最良の解決策は、奇妙な文字をエスケープするためにURLを実行することかもしれないと思います。そうすれば、ソースに直接入れられることはありませんが、最初にエスケープされるため、をハックアウトすることはできませんhref="..."

于 2010-08-10T17:54:16.593 に答える
1

正規表現置換を使用する代わりに、正規表現一致を使用して、必要な情報(この場合はリンクとリンクテキスト)を抽出します。

次に、その情報を正しい形式で書き出します。これにより、奇妙なデータを出力に取り込む機会がなくなるはずです。

変数を使用する前に変数を再確認して、HTMLが含まれていないことを確認することもできます。

于 2010-08-10T17:55:42.347 に答える