typecho中的nl2br

前段时间在弄Kindeditor4.0.5的时候发现了个小问题,就是在后台编辑文章的时候插入代码之后"pre"标签会另起一行(在源代码模式下查看的),下面是一张截图:

然后插入到typecho的表中,前台输出多一个br标签导致总是空一大截。

根据我搜索和查看源码终于找到了问题所在,在使用pre标签另起一行,等于插入了个"\n"换行符,而根据typecho源码中"/build/var/Typecho/Common/Paragraph.php"文件中的源码中的nl2br函数,所以导致如上的问题。

解决方法就是下面的代码了:

 /**
     * 用段落方法处理换行
     *
     * @access private
     * @param string $text
     * @return string
     */
    private static function cutByBlock($text)
    {
        $space = "( | )";
        $text = str_replace("\r\n", "\n", trim($text));
        $text = preg_replace("/{$space}*\n{$space}*/is", "\n", $text);
        $text = preg_replace("/\n{2,}/", "</p><p>", $text);
        //$text = nl2br($text);
        $text = preg_replace("/(<p>)?\s*<p:([0-9]{4})\/>\s*(<\/p>)?/s", "<p:\\2/>", $text);
        $text = preg_replace("/<p>{$space}*<\/p>/is", '', $text);
        return $text;
    }

$text = nl2br($text);这句注释掉就可以了,不过具体可能出现一些问题,这个我暂时没有发现,如果有朋友发现了可以留言给我。

其次建议使用我发的kindeditor插件,可以在后台设置使用p标签来还行。

转载请注明: 本文《typecho中的nl2br》来源于bstaint的博客

没有评论: