0

データベースからユーザーが送信した HTML コードを取得する次の関数があります。

function Code($code)
{
    return "<pre><code>".nl2br(htmlspecialchars($code))."</code></pre>";
}

のように呼びますecho code($query->row('html'));。私の質問には「深さ」が欠けていることはわかっていますが、これが最善の方法ですか? または、出力されたフォーマットが解析されたり (Javascript インジェクションなど)、一部のマシンで正しく出力されなかったりする可能性はありますか?

ありがとう!

ジャック

編集: 新しい (関連する) 質問があります: を使用して文字列を強調表示したいと思いますhighlight_string()。しかし、私はそれを適切に機能させることはできません。理由は理解できたと思いますが、これを修正する方法がよくわかりません。

function Code($code)
{
    return "<pre><code>".highlight_string(nl2br(htmlspecialchars($code)))."</code></pre>";
}

ご覧のとおり、私はhighlight_string()それをすべて使用しています。ただし、出力はまったく強調表示されず、代わりに文字エンティティ ( &lt;、「>」など) として出力されます。関数の順序を次のように変更すると、次のようになります。

return "<pre><code>".nl2br(htmlspecialchars(highlight_string($code)))."</code></pre>";

文字エンティティは出力されていませんが、文字列はまだ強調表示されていません。明確にするために、適用されるテキストの色に影響を与える CSS 書式設定もありません。また、PHP の設定を確認したところ、強調表示の色が確実に指定されています。

4

1 に答える 1

3

いいえ、大丈夫です。htmlspecialchars()HTML 制御文字をエンティティに相当するもの ( <=>&lt;など) に変換しますが、そこに何かを挿入する方法はありません。

于 2010-08-10T11:36:39.017 に答える