如何防止tinymce宏插入nbsp;?

时间:2012-06-14 作者:elleeott

我已经定义了以下宏按钮,用于在wp\\U编辑器可视化编辑器中将所选内容包装在短代码中:

(function() {
tinymce.create(\'tinymce.plugins.ingredient_name\', {

    init : function(ed, url){
        ed.addButton(\'ingredient_name\', {
        title : \'Tag ingredient\',
        onclick : function() {
            var text=ed.selection.getContent({\'format\':\'text\'});
            ed.execCommand(\'mceInsertContent\',false,\'[ingredient_name]\' + text + \'[/ingredient_name]\');
        },
            image: url + "/name.png"
        });
    }
});

tinymce.PluginManager.add(\'ingredient_name\', tinymce.plugins.ingredient_name);

})();
除了tinymce也在插入&;nbsp位于生成的短代码前面。因此,不是这个结果:

1 [ingredient_name]pound[/ingredient_name] salami
我明白了:

1 [ingredient_name]pound[/ingredient_name] salami
然后,在插入到DB中并渲染到模板中时,会不知何故损坏它,我得到了“1磅萨拉米”。我可以返回并删除冒犯的&;nbsp的,但我希望tinyMCE不要首先插入该实体。有什么想法吗?

2 个回复
SO网友:elleeott

事实证明,这根本不是tiny mce的问题,而是php DOMdocument,它过滤tinyMCE的输出,用错误的字符集解释,然后将垃圾字符传递给页面。

享乐

SO网友:Eugene Manuilov

TinyMCE WYSIWYG编辑器将空间符号转换为  默认情况下,实体。因为默认值entities 属性设置为将空间符号转换为  实体:

entities: "160,nbsp,38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade,8240,permil,181,micro...."
要解决此问题,应重新定义entities 初始化属性。例如:

tinyMCE.init({
    entities: "38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade"
});
要在WordPress中初始化TinyMCE选项,您必须将自己的挂钩添加到tiny_mce_before_init 过滤器:

function wpse8170_change_mce_options($initArray) {
    // other settings...
    $initArray[\'entities\'] = \'38,amp,34,quot,162,cent,8364,euro,163,pound,165,yen,169,copy,174,reg,8482,trade\'; 

    return $initArray;
}

add_filter(\'tiny_mce_before_init\', \'wpse8170_change_mce_options\');
可以调整的完整值列表,您可以在TinyMCE Configuration 页和的最后一个链接entities 选项

结束