在dedecms后台频道模型增长自定义字段,通常HTML文字编辑器能解决用户编辑问题,固然还包括纯单行或多行文本编辑。但发现dedecms会自动过滤掉某些敏感的字符,好比style样式,百度地图js调用问题。下面主要围绕着两个问题分享一下我的的经验。javascript
创建自定义字段能够参考《dedecms如何添加自定义字段与前台调用内容》php
dedecms默认的文本编辑器虽然不太美观,可是最简洁,我更换过百度神器:ueditor,功能强大,知足了绝大用户的编辑须要,可是替换的时候还须要二次开发,好比上传图集问题,点不了本地上传的按钮等,因此仍是选择用默认的文本编辑器。css
自定义的HTML编辑器功能强大,可是仍是不如默认模型的文本编辑器,为了数据安全,好比用在评论的地方,会过滤掉某些敏感词,或者某些非法窃取数据的代码。dede使用include\helpers\filter.helper.php进行过滤,被过滤的能够找到以下字段:html
$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');java
根据实际须要删除style便可,就能够解决HTML文本编辑器的样式乱码问题。express
百度地图生成器地址(http://api.map.baidu.com/lbsapi/createmap/index.html),设置完了以后点击复制代码,多余的代码能够不要,只须要复制 <script type="text/javascript"> 到 </script >之间的代码便可,其余代码,根据实际状况直接写在内容页模板里面,这里须要注意的是百度须要提供开发密钥,站长们去申请就行了,直接写在内容模板里。把显示地图的区域代码放在适合的位置,代码以下:api
<!--百度地图容器,样式根据实际状况修改,id默认为map-->
<div style="width:700px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div>安全
接下来就把js部分所有复制粘贴到自定义的文本框内,若是怕字符数限制,能够本身调大点。app
把工做作完了以后,在前台能看到一切正常,会发现再次进入编辑的时候,某些字符会被过滤,好比:title,script等,变成sc<x>ript等乱七八糟的字符,让地图显示失效。一样按照上述,编辑器
$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
删除title、script、javascript。可是第二次进去编辑的时候,前台地图仍然失效,经过文本对比工具发现,还有“,”逗号也被过滤了。在朋友的帮助下,仍是围绕include\helpers\filter.helper.php这个文件下功夫。
在大概68行
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
改为
$val = preg_replace('/([\x00-\x08|\x0b-\x0c|\x0e-\x19])/', '', $val);
问题获得解决。但不知道是否涉及到安全问题,若是不删除上述这些字段,还有其余实现方法。其实地图乱码应该修改68行的代码就足够了,在include\helpers\filter.helper.php发现如下这个字段,把它删除就能解决样式乱码问题。