{dede:php} 不显示,【原创文章】DEDE后台部分文章内容不显示的原因和解决办法

这些天在DEDE后台发现一个问题,发现文章的内容页为空白,但是前台打开是有内容的。明明这个升级php到5.4之后标题空白之类的问题之前解决了的啊(具体见此文:升级PHP5.4后dede和帝国发表文章中文标题和内容不识别的解决办法),现在怎么内容空白了呢?

在后台一阵翻腾,发现问题是部分文章有内容,而部分文章无内容!那么这个问题让我意识到,是文章内容字符有问题,从而导致了前端可以显示,而后台文章内容空白。

通过截半判断法,查找到是因为文章里面包含了一个字符“―”,从而导致无法显示。这个字符“―”和中文状态下的“-”是有差别的!我意识到是之前升级网站系统时候加htmlspecialchars的问题了。

DEDE后台编辑器我使用的是ckeditor,打开显示文章内容的相关php文件\include\ckeditor\ckeditor_php5.php,之前为了使网站适应php5.4,做了优化,相关代码如下:public function editor($name, $value = "", $config = array(), $events = array())

{

$attr = "";

foreach ($this->textareaAttributes as $key => $val) {

$attr.= " " . $key . '="' . str_replace('"', '"', $val) . '"';

}

$out = "" . htmlspecialchars($value, ENT_COMPAT, 'GB2312') . "\n";

if (!$this->initialized) {

$out .= $this->init();

}

这是我们在网上看到的绝大多数的解决dede与php5.4的兼容办法。

开始我还以为是这个函数转化html语言的问题,跑去数据库一看,文章内容完整保存在数据库,看来仅仅是编辑器这边读出数据并显示的问题了。

仔细研究了php的htmlspecialchars函数。

htmlspecialchars($value, ENT_COMPAT, 'GB2312')这句代码有2个作用,第一个作用就是把value中的把预定义的字符转换为 HTML 实体, ENT_COMPAT的限制作用是只转换双引号。第二个就是使编码value的内容为gb2312编码,但是这里的问题来了,它如果遇到了无效编码,那么就会返回一个空的字符串。很显然,我们这里就是遇到了无效编码“―”,所以返回为空!

解决办法也很简单,就是忽略无效的编码。将上面的语句htmlspecialchars($value, ENT_COMPAT, 'GB2312')修改为htmlspecialchars($value, ENT_IGNORE, 'GB2312')

这样就解决问题了,后台文章内容都显示了。

解决问题的方法并不难,要从现象找出内在问题所在,这才是难点!

喜欢 (2)or分享 (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值