早上好,
问题是这样的:我有一些文本是通过文本编辑器(所见即所得/TinyMCE)输入的,并作为帖子显示在其他地方。 我们遇到的问题是文本在显示为帖子时会丢失其格式。 在挖掘代码后,我发现这是通过 strip_tags() + echo preg_replace() 组合完成的。 我仍然是PHP的新手,但我能够弄清楚:
- strip_tags() 正在取出格式(b/c就是这样滚动的)
- 我可以添加并显示粗体和斜体文本
- 带下划线和删除线的文本是 CSS 样式,将代码(因为它保存在数据库表上)添加到 strip_tags() 列表中并没有解决问题
我的问题是:我可以修改现有代码来解决这个问题,还是应该使用其他东西(htmlentities())?
编辑:我尝试了html实体,但它失败了。编辑:我只添加了标签,问题解决了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)我知道它需要被删除或修改。
提前非常感谢。
关键是TinyMCE返回名义上有效的富HTML,在HTML页面中使用之前不需要剥离或转义。 但是,您不能假设TinyMCE编辑器正在客户端上运行,因为您可能会被直接发布包含XSS攻击的响应的人利用。
IIRC,TinyMCE默认返回XHTML。 您需要使用诸如HTML Purifier之类的库来确保任何返回的HTML都是正确的。