WYSIWG Filter过滤中文字体名称的问题
CKEDITOR,HTML过滤器用的是WYSIWG Filter。默认只有英文的字体,没有中文的。
在sites/all/modules/ckeditor.config.js里添加中文字体名称:
config.font_names = "宋体/宋体;黑体/黑体;仿宋/仿宋_GB2312;楷体/楷体_GB2312;
隶书/隶书;幼圆/幼圆;微软雅黑/微软雅黑;" + config.font_names;
在输入界面上选择中文字体,查看源代码,一切正常。保存到数据库以后,发现中文字体不见了。颇费一番折腾,发现WYSIWG Filter对各CSS属性都定义了检验的正则表达式,不符合正则表达试的都认为是不合格的属性,会被清除。具体过程是:
- CKEDITOR生成编辑结果,假设HTML源码为:<span style="font-family: 宋体;">abcabc</span>
- WYSIWG解析出style中的CSS属性font-family的值为: 宋体
- WYSIWG调用font-family的正则表达式,检查 “宋体”这个值不合法,于是丢弃这个值
- 于是style为空,也被丢弃
- 最后的结果变成了<span>abcabc</span
解决的方法:修改WYSIWG关于font-family的正则表达式。在 wysiwyg_filter.inc 文件中找到 font-family,原正则表达式为:'(?:[-_a-zA-Z0-9"\' ]*(?:\s*,\s*[-_a-zA-Z0-9"\' ]*)*),这个表达式不允许汉字是显而易见的。修改成下面的正则表达式:'(?:[\S ]*(?:\s*,\s*[\S ]*)*)',再测试,一切正常。说明解决的思路基本上正确了。当然这个正则表达式还有问题,需要进一步修正。
WYSIWG Filter的地址: http://drupal.org/project/wysiwyg_filter
引自:http://blog.sina.com.cn/s/blog_70121e200100xvzl.html
下一篇: 怎样在CKeditor中添加入中文字体?