又解决了一个问题

自从装上那个缩略图插件后,在后台编辑文章时总会出现一个错误提示:

这个错误是ta_exceprt.php中的mb_strlen() 缺少一个参数。由于对php还是不怎么了解,原来mb_strlen()是统计“字”数的,但是由于各种编码的问题,所以要统计正确,就要第二个参数的协助。错误提示也没有说是哪个语句调用它时出的错误。所以我今晚上半夜就研究了一下ta_excerpt.php这个文件。

if ( !function_exists('mb_strlen') ) {
        function mb_strlen ($text, $encode) {
                if ($encode=='UTF-8') {
                        return preg_match_all('%(?:
                                          [\x09\x0A\x0D\x20-\x7E]           # ASCII
                                        | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
                                        |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs
                                        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
                                        |  \xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates
                                        |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
                                        | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
                                        |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
                                        )%xs',$text,$out);
                }else{
                        return strlen($text);
                }
        }
}

上面是ta_excerpt.php的一段。如果没有mb_strlen()这个函数,后面就定义一个。参数$encode没有默认值,如果调用这个函数的时候没有加这个参数,就会出现上面的错误提示。但是为什么别人的不加就可以呢?或许与php有关。

刚才网上查了一下,在linux下,如果要php支持mb_strlen()这个函数,还要用到php-mbstring这个包。我装上这个包后,然后重启apache后,错误消失了。

为了找出这个错误的原因,我把这个插件都给完全删除了。

2011-03-30:昨晚上把这个“bug”提交给作者,今早得到回复了。

随机文章:

2 Responses to “又解决了一个问题”

  1. lizhiyong says:

    日哦
    12点还在忙这个 精力真充沛啊

    • sunliguo says:

      晚上一般都是11点以后睡觉,早上8点半左右。睡眠时间是足够了。遇到一些电脑问题时,我一般都是废寝,而且解决后特别兴奋。
      另:你留言是的网址拼错了啊,看来是在你的电脑上有缓存导致的。

发表评论