早上好,
这是问题所在: 我通过文本编辑器(WYSIWYG / TinyMCE)输入了一些文本,并在其他地方显示为发布。我们遇到的问题是,文本在显示为发布时会丢失其格式。在深入研究代码后,我发现这是使用strip_tags()+ echo preg_replace()组合完成的。我还是PHP新手,但我能够弄明白:
我的问题是:我可以修改现有代码来解决这个问题,还是应该使用别的东西(也许是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)我知道需要删除或修改它。
非常感谢提前。
答案 0 :(得分:1)
重点是TinyMCE返回名义上有效的富HTML,在HTML页面中使用之前不需要剥离或转义。 然而,您不能假设TinyMCE编辑器正在客户端上运行,因为您可能会被直接发布包含XSS攻击的响应的人利用。
IIRC,TinyMCE默认返回XHTML。您需要使用HTML Purifier等库确保任何返回的HTML都是正确的。