在Dedecms后台频道模型中增加自定义字段时,通常HTML文字编辑器可以满足用户的基本编辑需求。这包括单行或多行文本的编辑功能。然而,在实际使用过程中,我们可能会遇到Dedecms自动过滤掉某些敏感字符的问题,例如style样式或百度地图JS调用问题。本文将围绕这两个问题分享一些解决经验。

建立自定义字段的方法可以参考相关教程《Dedecms如何添加自定义字段与前台调用内容》。

### HTML文字样式编辑乱码问题

Dedecms默认提供的文本编辑器虽然界面简单,但非常实用。尽管我们也尝试过使用更强大的编辑器,如百度的UEditor,但由于其需要二次开发(如上传图集问题、本地上传按钮不可用等),最终还是选择了默认的文本编辑器。

自定义的HTML编辑器功能虽然强大,但在数据安全性方面,Dedecms会对某些敏感词或非法代码进行过滤。例如,在评论区域,系统会过滤掉可能带来安全风险的代码。这种过滤机制通过`include/helpers/filter.helper.php`文件实现。被过滤的关键字包括:

$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
    

根据实际需求,如果需要保留HTML样式的正常显示,可以删除数组中的`style`关键字。这样即可解决HTML文本编辑器的样式乱码问题。

### 百度地图JS失效问题

要生成百度地图,可以访问百度地图生成器地址,并按照提示设置完成后复制代码。只需复制``之间的代码即可。其他部分可以根据实际情况直接写入内容页模板中。需要注意的是,百度地图需要提供开发者密钥,站长们可以自行申请后将其嵌入到内容模板中。

以下是显示地图的区域代码示例:



接下来,将生成的JS代码全部复制粘贴到自定义文本框内。如果担心字符数限制,可以适当调整输入框大小。

完成上述操作后,前台显示一切正常,但再次进入编辑页面时,可能会发现某些字符(如`title`、`script`等)被过滤成类似`script`的乱码,导致地图无法正常显示。

同样地,我们需要对`filter.helper.php`文件中的过滤规则进行调整:

$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`关键字。即便如此,前台地图仍可能失效。通过对比工具发现,逗号(`,`)也被过滤了。经过进一步研究,可以在`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行代码就足够解决地图乱码问题。在`filter.helper.php`文件中,删除相关字段即可。

以上方法可以帮助您解决Dedecms中HTML编辑器样式乱码及百度地图JS失效的问题。希望对您有所帮助!