在dedecms后台频道模型增加自定义字段时,HTML文字编辑器能够解决用户编辑问题,包括纯单行或多行文本编辑,但dedecms会自动过滤掉某些敏感的字符,比如style样式和百度地图js调用等。
HTML文字样式编辑乱码问题
dedecms默认的文本编辑器虽然不太美观,但是最简洁,更换过功能强大的ueditor后,满足了绝大用户的编辑需要,但替换的时候还需要二次开发,比如上传图集问题,点不了本地上传的按钮等,所以还是选择用默认的文本编辑器,自定义的HTML编辑器功能强大,但是还是不如默认模型的文本编辑器,为了数据安全,比如用在评论的地方,会过滤掉某些敏感词,或者某些非法窃取数据的代码,dede使用includehelpersfilter.helper.php进行过滤,被过滤的可以找到如下字段:
$ra1 = array(‘javascript’, ‘vbscript’, ‘expression’, ‘applet’, ‘meta’, ‘xml’, ‘blink’, ‘link’, ‘style’, ‘script’, ’embed’, ‘object’, ‘iframe’, ‘frame’, ‘frameset’, ‘ilayer’, ‘layer’, ‘bgsound’, ‘title’, ‘base’);
根据实际需要删除style即可,就可以解决HTML文本编辑器的样式乱码问题。
百度地图js失效问题
百度地图生成器地址(http://api.map.baidu.com/lbsapi/createmap/index.html),设置完了之后点击复制代码,多余的代码可以不要,只需要复制 <script type="text/javascript"> 到 </script >之间的代码即可,其他代码,根据实际情况直接写在内容页模板里面,这里需要注意的是百度需要提供开发密钥,站长们去申请就好了,直接写在内容模板里,把显示地图的区域代码放在适合的位置,代码如下:
<!百度地图容器,样式根据实际情况修改,id默认为map> <div style="width:700px;height:550px;border:#ccc solid 1px;fontsize:12px" id="map"></div>
接下来就把js部分全部复制粘贴到自定义的文本框内,如果怕字符数限制,可以自己调大点。
把工作做完了之后,在前台能看到一切正常,会发现再次进入编辑的时候,某些字符会被过滤,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,但是第二次进去编辑的时候,前台地图仍然失效,通过文本对比工具发现,还有“,”逗号也被过滤了,在朋友的帮助下,还是围绕includehelpersfilter.helper.php这个文件下功夫,在大概68行$val = preg_replace(‘/([x00x08,x0bx0c,x0ex19])/’, ”, $val);改成$val = preg_replace(‘/([x00x08|x0bx0c|x0ex19])/’, ”, $val);问题得到解决,但不知道是否涉及到安全问题,如果不删除上述这些字段,还有其他实现方法,其实地图乱码应该修改68行的代码就足够了,在includehelpersfilter.helper.php发现以下这个字段,把它删除就能解决样式乱码问题。
FAQs
Q1: dede文章增加HTML自定义字段字符被过滤问题如何解决?
A1: dede使用includehelpersfilter.helper.php进行过滤,被过滤的可以找到如下字段:$ra1 = array(‘javascript’, ‘vbscript’, ‘expression’, ‘applet’, ‘meta’, ‘xml’, ‘blink’, ‘link’, ‘style’, ‘script’, ’embed’, ‘object’, ‘iframe’, ‘frame’, ‘frameset’, ‘ilayer’, ‘layer’, ‘bgsound’, ‘title’, ‘base’);根据实际需要删除style即可,就可以解决HTML文本编辑器的样式乱码问题。
Q2: 百度地图js失效问题如何解决?
A2: 百度地图生成器地址(http://api.map.baidu.com/lbsapi/createmap/index.html),设置完了之后点击复制代码,多余的代码可以不要,只需要复制 <script type="text/javascript"> 到 </script >之间的代码即可,其他代码,根据实际情况直接写在内容页模板里面,这里需要注意的是百度需要提供开发密钥,站长们去申请就好了,直接写在内容模板里。
【dede文章增加HTML自定义字段字符被过滤问题】
问题
在使用织梦DedeCMS(Dedecms)进行文章编辑时,如果尝试通过HTML自定义字段添加特殊字符或HTML标签,发现这些字符或标签被自动过滤掉了。
原因分析
这种现象通常是由于以下几个原因造成的:
1、系统安全设置:为了防止XSS攻击,DedeCMS默认会对输入内容进行过滤,包括HTML标签和特殊字符。
2、自定义字段配置:自定义字段可能未正确配置,导致HTML内容无法正常解析。
3、模板文件问题:模板文件可能对HTML标签有特殊处理,导致内容被过滤。
解决方法
1. 修改系统安全设置
登录后台管理,进入“系统基本参数”设置。
查找“文章内容过滤”相关设置,通常有一个开关可以控制是否开启内容过滤。
关闭该开关,保存设置后,再尝试添加HTML内容。
2. 调整自定义字段配置
进入“模型管理”,找到对应模型。
点击“自定义字段”,对需要添加HTML内容的字段进行编辑。
在“字段属性”中,找到“字段类型”选项,选择“文本编辑器”或“HTML编辑器”。
保存字段设置。
3. 修改模板文件
找到相应的模板文件,通常位于“templets”目录下。
在模板文件中,查找处理HTML标签的代码,可能是PHP函数或JavaScript脚本。
修改或删除这些代码,以允许HTML标签正常显示。
4. 使用插件或代码
如果上述方法都无法解决问题,可以考虑使用第三方插件或自定义代码来处理HTML内容。
示例代码
以下是一个简单的PHP代码示例,用于处理HTML内容:
function safe_html($content) { $content = htmlspecialchars($content, ENT_QUOTES, 'UTF8'); $content = str_replace(" ", "<br>", $content); return $content; } // 使用示例 $html_content = "<p>Hello, <strong>World!</strong></p>"; $safe_html_content = safe_html($html_content); echo $safe_html_content;
通过以上方法,可以解决在织梦DedeCMS中添加HTML自定义字段时字符被过滤的问题,根据具体情况,可能需要调整系统设置、模板文件或使用特定的代码来确保HTML内容能够正确显示。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1124674.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复