1

おはようございます、

問題は次のとおりです。テキスト エディター (WYSIWYG/TinyMCE) を介して入力されたテキストが、別の場所に投稿として表示されています。私たちが抱えている問題は、投稿として表示されるときにテキストの書式設定が失われることです。コードを掘り下げた後、これが strip_tags() + echo preg_replace() コンボで行われていることがわかりました。私はまだPHPに慣れていませんが、理解できました:

  • strip_tags() は書式設定を取り出していました (b/c がロールする方法です)
  • と を追加して、太字でイタリック体のテキストを表示することができます
  • 下線と取り消し線のテキストは CSS スタイルであり、コード (db テーブルに保存されているため) を strip_tags() リストに追加しても問題は解決しませんでした

私の質問は、これを解決するために既存のコードを変更できますか、それとも何か他のもの (おそらく htmlentities()) を使用する必要がありますか?

編集: htmlentities を試しましたが、失敗しました。編集: タグを追加しただけで、問題は 50% 解決されました。テキストに下線が引かれていますが、その後に続く下線のないテキストよりも下に表示されます。下線付きのテキストがサブテキストか何かとして扱われているようです。

コードスニペット:

    <div class="display_text_area">
        <?php $text = strip_tags(str_ireplace("</p>", "</p><br/>", 
              $text_detail->description),
              '<font><ul><li><br/><strong><em><span style="text-decoration: underline;">'); ?>
        <?php echo preg_replace('/(<br[^>]*>\s*){2,}/', '<br/>', $text); ?>
    </div>

ここにタグを残して、(a) 試してみたこと、(b) うまくいかなかったことを示します。したがって、(c) 削除または変更する必要があることはわかっています。

よろしくお願いします。

4

1 に答える 1

1

重要なのは、TinyMCE が、HTML ページで使用する前にストリッピングやエスケープを必要としない 名目上有効なリッチ HTML を返すことです。ただし、TinyMCE エディターがクライアント上で実行されているとは限りません。XSS 攻撃を含む応答を直接投稿するだけで悪用される可能性があるからです。

IIRC、TinyMCE はデフォルトで XHTML を返します。HTML Purifier などのライブラリを使用して、返された HTML が正しいことを確認する必要があります。

于 2012-07-05T15:45:34.790 に答える