Categories: WP/WP Plugins | Tags: | Views: 1,548

有时候在发文章的时候,需要贴一些代码。

一般大家都用的是可视化的编辑器,如FCKEditor,甚至wp自带的编辑器都是可视化的。

大家习惯了(至少我是)在可视化的模式化写东西,我想没有谁去一个个敲HTML源码吧。。。

但是在贴代码的时候会有一些问题,如 "a"=>2 ; 你在可视化的模式中敲下这行代码,再转入源代码看就变成了 "a"=>2; ,当然, 如果你不用语法高亮插件,这个时候在前台显示是没有问题的,一样能显示 "a"=>2 ;  ,但是我想贴代码如果不高亮,那就犹如一张黑白照片,古板而没有生机。

但是如果你采用一些语法高亮插件(我用的是WP-codebox),你就会发现你的烦恼来了,如果你的代码是在可视化模式下输入的,那么在前面就显示"a"=>2; (WP-codebox是,其他我未用),然而这并不是我们想要的效果,以往我的做法就是在源代码的视图下贴代码,自己编辑源代码,并且文章一旦写好,就再也不敢修改,因为一修改在源代码视图里写好的东西又被转换了,苦不堪言。也想过换插件,可是又怕以前贴的代码乱了,一直没换,再者,开始用语法高亮插件的时候也看过一些插件的比较的文章,觉得还是这款效率好一些。

下面来说如何解决这个问题。

其实思路也很简单,编辑器把HTML编码了,我们再解码就行了。也曾想过让编辑器不转换HTML代码,但是发现很麻烦,因为并不是所有的HTML都不需要转换,对于wp-codebox,pre以外的代码是需要的,于是放弃了这个想法,然后只能让wp-codebox委屈一下,在处理之前先把被编辑器转换过的代码再转换过来,因为wp-codebox只处理pre的代码,所以不会干扰其他的代码。

打开wp-codebox的文件main.php,其中在这么一行:

1
$geshi = new GeSHi($code, $language);

在这一行改成:

1
$geshi = new GeSHi(wp_codebox_unhtmlentites($code), $language);

然后再在这一页的其他地方添加一个函数:

1
2
3
4
5
6
7
8
9
10
function wp_codebox_unhtmlentites($string) { //把被编辑器转换的HTML代码转换回来
    static $aTransSpecchar = array(
        '"' => '"',
        ' ' => ' ',
        '&lt;' => '<',
        '&gt;' => '>',
        '&amp;' => '&',
    );
    return strtr($string, $aTransSpecchar);
}

 这个时候,你在可视化模式下输入的代码是什么样,就是什么样了,再也不用担心编辑器把HTML的特殊字符转换了,并且写好的文章可以随便的修改了。

如果其他高亮插件有同样的问题,可以参照上面的修改办法进行修改就可以解决问题了。

这篇文章来自 迷途知返(PWWANG.COM), 转载请注明出处。 版权说明

  1. January 5th, 2009 at 00:41
    Reply | Quote | #1

    贵站链接已经做好

  2. January 5th, 2009 at 22:57
    Reply | Quote | #2

    这个做法不错,试试看,我写日志时候,一般都是直接编辑HTML的,或者使用标签

    • January 5th, 2009 at 23:32
      Quote | #3

      建议你在本地先测试一下,直接编辑HTML感觉效率有点低了,并且如果你采用默认视图的可视化视图的话,修改文章的时候一打开那些符号就又被转换了

  3. January 5th, 2009 at 22:59
    Reply | Quote | #4

    “<!-- -->”这个标签好像留言没法显示 :?:

    • January 5th, 2009 at 23:32
      Quote | #5

      被当作HTML注释了? 留言这块我到是没太在意。

  4. November 10th, 2009 at 15:08
    Reply | Quote | #6

    看到这篇文章,我感动得眼泪都快出来了。。。。折磨我好久的问题啊。。。

;) :| :x :twisted: :roll: :oops: :o :mrgreen: :lol: :idea: :evil: :cry: :arrow: :P :D :?: :? :) :( :!: 8O 8)

你可以使用@somebody:开头, 来邮件通知somebody你回复了他的留言(用户名区分大小写).