TA的每日心情 | 怒 2024-7-30 14:35 |
---|
签到天数: 85 天 连续签到: 2 天 [LV.6]常住居民II
|
马上注册,下载更多源码!
您需要 登录 才可以下载或查看,没有账号?立即加入
x
在后台进行文章编辑的时候,如果文章内容中带有DIV,在提交到数据库的时候会被直接去掉或者替换成<P>标签,见下图
通过初步分析,开始觉得是编辑器过滤了DIV标签,后面通过查资料发现,在kindeditor编辑器里面有一个filterMode 过滤模式,将其中的filterMode : ture改为filterMode : false,也就是关闭过滤。但是悲催的事情还是发生了。
后面问了kindeditor的官方,说是只要关闭过滤就可以不再过滤了,后面通过数据捉包,发现在发送的数据包内容是没有过滤的但是在数据库里面查看的话内容还是被替换或者过滤了,只要基本上就可以认定是数据处理的时候过滤了,那问小黄牛具体的答复是include/form.class.php文件进行数据提交处理。
最后问了CMS的作者,得到的答复,没有进行标签过滤。
研究了几天无果后,换了DED来做了。
终于把项目做完了,回来再看到时候,我觉得还是原来的思路是对的,那就通过数据提交这里的查找,最后一步一步跟踪,最后发现在data.input.class.php文件中找到下面的这段
- /*
- 过滤特殊字符
- */
- if($r[$key]['form']=='fckeditor' || $r[$key]['form']=='content' || $r[$key]['form']=='copyfrom')
- {
- $data[$key]=safehtml(str_replace(array('<div','</div>','<DIV','</DIV>','<br />','<br>','<BR />','<BR>'),array('<p','</p>','<p','</p>','</p><p>','</p><p>','</p><p>','</p><p>'),$value),4);
- if($r[$key]['form']!='content')continue;
- }
- else
- {
- $data[$key]=dayucms_htmlspecialchars($value);
- }
- /*
复制代码
具体的代码就不做解释了,直接把$data[$key]=safehtml(str_replace(array('<div','</div>','<DIV','</DIV>','<br />','<br>','<BR />','<BR>'),array('<p','</p>','<p','</p>','</p><p>','</p><p>','</p><p>','</p><p>'),$value),4);注释掉就可以了,就可以进行保留DIV写入数据库了。
当初作者在写这个过滤的时候估计是担心用户进行数据录入的时候如果有DIV存在的话,会改变页面的布局,而kindeditor是在后期替换的,也就是在其中就有过滤的模式了,也就是如果还需要过滤一些代码的话,那就直接开启kindeditor的filterMode模式,里面可以针对某些标签进行保留,非常方便。
|
|