使用strip_tags()和preg_replace()显示在WYSIWYG / TinyMCE文本编辑器中输入的文本

时间:2012-07-05 15:31:19

标签: php javascript html

早上好,

这是问题所在: 我通过文本编辑器(WYSIWYG / TinyMCE)输入了一些文本,并在其他地方显示为发布。我们遇到的问题是,文本在显示为发布时会丢失其格式。在深入研究代码后,我发现这是使用strip_tags()+ echo preg_replace()组合完成的。我还是PHP新手,但我能够弄明白:

  • strip_tags()正在取出格式化(b / c就是它如何滚动)
  • 我可以添加并显示粗体和斜体文字
  • 带下划线和删除线的文本是CSS样式,并将代码(因为它保存在db表中)添加到strip_tags()列表并没有解决问题

我的问题是:我可以修改现有代码来解决这个问题,还是应该使用别的东西(也许是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)我知道需要删除或修改它。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

重点是TinyMCE返回名义上有效的富HTML,在HTML页面中使用之前不需要剥离或转义。 然而,您不能假设TinyMCE编辑器正在客户端上运行,因为您可能会被直接发布包含XSS攻击的响应的人利用。

IIRC,TinyMCE默认返回XHTML。您需要使用HTML Purifier等库确保任何返回的HTML都是正确的。