今天在处理dede织梦 GBK和UTF-8的编码过程中,发现一个由于PHP版本引起的问题。
我PHP5.4以下版本中GBK和UTF-8的中文都能显示正常,但是当PHP版本高于5.4之后,GBK织梦就开始出现各种中文不显示的问题。
下面我们就一个一个来解决吧:
1、后台-系统基本参数无法保存中文 修改方法:
打开dede\templets\sys_info.htm找到代码:
htmlspecialchars($row[‘value’])
替换成:
htmlspecialchars($row[‘value’],ENT_COMPAT ,’GB2312′)
如果发现还有其他页面,也没办法保存中文,最好在dreamweaver下整站搜索htmlspecialchars($row[‘value’]),然后批量替换成htmlspecialchars($row[‘value’],ENT_COMPAT ,’GB2312′),这样就能保证系统的表单没问题。
但是这个修改的方法,对编辑器中的中文没办法,还要修改编辑器,方法为:
打开include/ckeditor/ckeditor_php5.php文件,找到代码:
$out = “<textarea name=\” . $name . “\” . $attr . “>” .htmlspecialchars($value). “</textarea>\n”;
改成:
$out = “<textarea name=\” . $name . “\” . $attr . “>” .htmlspecialchars( $value, ENT_COMPAT, ‘GB2312′ ). “</textarea>\n”;
2、还有标签也不显示,修改方法为:
打开dede/article_add.php 和 dede/article_edit.php找到代码:
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen));
改成
$title = htmlspecialchars(cn_substrR($title,$cfg_title_maxlen),ENT_COMPAT ,’GB2312’);
这些都没问题后,发现 核心-批量维护-tag标签管理里面的中文标签全部都不显示了,真是麻烦,修改方法:
打开/dede/templets/tags_main.htm文件,找到代码:
$fields[‘tag’] = htmlspecialchars($fields[‘tag’]);
替换为
$fields[‘tag’] = htmlspecialchars($fields[‘tag’],ENT_COMPAT ,’GB2312′);
这样修改,tag标签就显示了。
但是这些都是后台的显示问题。然而还有TAG前台显示的问题
3、TAG前台不显示中文解决方法:
打开include\taglib\tag.lib.php
找到代码:$row['tag'] = htmlspecialchars($row['tag'])
改为:
 $row['tag'] = htmlspecialchars($row['tag'],ENT_COMPAT ,'GB2312');
这样一修改,在php5.4下的gbk版织梦就不会出现编码的问题了。