EEDU Blog: 博客 ·  资讯 ·  论坛 ·  留言
登录 新用户? 注册   |  

ahaoxie's blog

订阅博客:

环境生态网站长

阅读全文

WYSIWG Filter过滤中文字体名称的问题

CKEDITOR,HTML过滤器用的是WYSIWG Filter。默认只有英文的字体,没有中文的。

在sites/all/modules/ckeditor.config.js里添加中文字体名称:

config.font_names = "宋体/宋体;黑体/黑体;仿宋/仿宋_GB2312;楷体/楷体_GB2312;
隶书/隶书;幼圆/幼圆;微软雅黑/微软雅黑;" + config.font_names;

在输入界面上选择中文字体,查看源代码,一切正常。保存到数据库以后,发现中文字体不见了。颇费一番折腾,发现WYSIWG Filter对各CSS属性都定义了检验的正则表达式,不符合正则表达试的都认为是不合格的属性,会被清除。具体过程是:

  1. CKEDITOR生成编辑结果,假设HTML源码为:<span style="font-family: 宋体;">abcabc</span>
  2. WYSIWG解析出style中的CSS属性font-family的值为: 宋体
  3. WYSIWG调用font-family的正则表达式,检查 “宋体”这个值不合法,于是丢弃这个值
  4. 于是style为空,也被丢弃
  5. 最后的结果变成了<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

发表于: 2011-09-30 00:58 | 全文(查看: 141) | 评论(0) | 本文地址 | 收藏 
分类: 小窍门(95)   标签: WYSIWG  CKEDITOR  新知  

"WYSIWG Filter过滤中文字体名称的问题" 的评论: (共 0 条)

你对本文的评论:

登录后再作评论
Page was generated in 17 milliseconds