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 回答