我所知道的富文本编辑器就是像DZ论坛那样,所见所得那样的。
1:但是我一直有个疑问,不是说客户端提交的数据要过滤吗,不然不就是XXS吗,DZ是UBB的方式处理的是吗?
2:那些富文本编辑器,最后提交到服务器后,那些包含html代码的,能直接存到数据库里面吗,肯定不能允许用户这样吧?
3:还有比如SF的这个Markdown编辑器原理是什么呢,它后台数据库有没有保存我们输入的html,js代码呢?
4:还有像DZ论坛这样的用户发帖,投票什么的,这个编辑器内部是怎么样的,搞不懂,找处理的源码又找不到……
我之前一直使用text文本框的,后台就直接过滤所有标签,就这么简单,但是这样就只能有普通的文本了,没有DZ那样用户发帖那样强大,现在想用一个富文本编辑器,但是不知道php后台该怎与富文本编辑器对接,比如百度的那个,或者SF的这个编辑器。
然后那个富文本编辑器插入图片,那个是上传图片,然后返回图片地址,插入到内容中吗,那DZ的那个上传附件呢,帖子中的图片还会惰性加载呢,这个是怎么实现的呢,如果是直接img标签插入到内容了实现不了吧,或者是用一个什么图片占位符什么的,然后js操作附件数据……
搞不懂,希望高手给我解释一下,我知道原理再去看代码应该会简单许多,谢谢了!
html代码直接存数据库,用户写的什么就存什么。
各种编辑器都是生成html代码,然后点击提交html的代码。
这有什么好疑问的吗?
html有个pre标签,你造吗?
要防止JS注入。
很简单的啊,PHP输出到前端之前,用str_replace函数,把<替换成& lt;(去掉空格),把>替换成& gt;(去掉空格)等等。
请百度“HTML特殊字符编码”。
保证标签不会起作用,JS代码不会执行就完了。
防御XSS攻击,最简单粗暴的做法就是用htmlspecialchars把特殊字符
(&,",',<,>)
替换为HTML实体(&"'<>)
后输出.上面这种实现非常简单,而且安全,显示也非常清爽.编辑器就一个普通的文本框textarea就好了.
防御XSS攻击,最复杂的做法就是自己写正则过滤,不过还好有HTMLPurifier库,除了能过滤XSS代码,还能把不完整的标签补全或者去掉.
可以通过BBCode或者Markdown标记定义一些HTML功能,比如BBCode:
用户在文本框里输入BBCode标签,页面输出时把BBCode正则替换成HTML,经过HTMLPurifier过滤后安全输出.
SF的编辑器是markdown语法编辑器,源代码在此:
一个结构清晰的,易于维护的,现代的PHP Markdown解析器
我还看到网上有那种微信编辑器,纠结