素材牛VIP会员
富文本编辑器与php后台开发是怎么结合使用的呢?
 青***e  分类:ThinkPHP  人气:748  回帖:4  发布于6年前 收藏

我所知道的富文本编辑器就是像DZ论坛那样,所见所得那样的。

1:但是我一直有个疑问,不是说客户端提交的数据要过滤吗,不然不就是XXS吗,DZ是UBB的方式处理的是吗?

2:那些富文本编辑器,最后提交到服务器后,那些包含html代码的,能直接存到数据库里面吗,肯定不能允许用户这样吧?

3:还有比如SF的这个Markdown编辑器原理是什么呢,它后台数据库有没有保存我们输入的html,js代码呢?

4:还有像DZ论坛这样的用户发帖,投票什么的,这个编辑器内部是怎么样的,搞不懂,找处理的源码又找不到……

我之前一直使用text文本框的,后台就直接过滤所有标签,就这么简单,但是这样就只能有普通的文本了,没有DZ那样用户发帖那样强大,现在想用一个富文本编辑器,但是不知道php后台该怎与富文本编辑器对接,比如百度的那个,或者SF的这个编辑器。

然后那个富文本编辑器插入图片,那个是上传图片,然后返回图片地址,插入到内容中吗,那DZ的那个上传附件呢,帖子中的图片还会惰性加载呢,这个是怎么实现的呢,如果是直接img标签插入到内容了实现不了吧,或者是用一个什么图片占位符什么的,然后js操作附件数据……

搞不懂,希望高手给我解释一下,我知道原理再去看代码应该会简单许多,谢谢了!

讨论这个帖子(4)垃圾回帖将一律封号处理……

Lv1 新人
郭***己 Web前端工程师 6年前#1

防御XSS攻击,最简单粗暴的做法就是用htmlspecialchars把特殊字符(&,",',<,>)替换为HTML实体(&amp;&quot;&#039;&lt;&gt;)后输出.

<?php
//ENT_QUOTES表示把单引号也替换&#039;
$html = htmlspecialchars($html, ENT_QUOTES, 'UTF-8');
//换行替换成<br />
$html = str_replace(array("\r\n", "\r", "\n"), '<br />', $html);
echo $htm;

上面这种实现非常简单,而且安全,显示也非常清爽.编辑器就一个普通的文本框textarea就好了.

防御XSS攻击,最复杂的做法就是自己写正则过滤,不过还好有HTMLPurifier库,除了能过滤XSS代码,还能把不完整的标签补全或者去掉.

<?php
require dirname(__FILE__).'/htmlpurifier/library/HTMLPurifier.auto.php';
$purifier = new HTMLPurifier();
echo $purifier->purify($html);

可以通过BBCode或者Markdown标记定义一些HTML功能,比如BBCode:

[b]粗体文字[/b]
[color=#FF0000]红色文字[/color]
[img=PunBB bbcode test]/upload/bbs/2017/12/21/20171221140128_89.png[/img] 
[url=http://127.0.0.1:8080/punbb/]PunBB forum[/url]

用户在文本框里输入BBCode标签,页面输出时把BBCode正则替换成HTML,经过HTMLPurifier过滤后安全输出.

Lv7 码师
牛***3 PHP开发工程师 6年前#2

SF的编辑器是markdown语法编辑器,源代码在此:

一个结构清晰的,易于维护的,现代的PHP Markdown解析器

Lv5 码农
流***雨 交互设计师 6年前#3

我还看到网上有那种微信编辑器,纠结

Lv1 新人
青***8 页面重构设计 6年前#4

html代码直接存数据库,用户写的什么就存什么。
各种编辑器都是生成html代码,然后点击提交html的代码。
这有什么好疑问的吗?
html有个pre标签,你造吗?

要防止JS注入。
很简单的啊,PHP输出到前端之前,用str_replace函数,把<替换成& lt;(去掉空格),把>替换成& gt;(去掉空格)等等。
请百度“HTML特殊字符编码”。
保证标签不会起作用,JS代码不会执行就完了。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取