如何在blogger日志中贴代码

我不是用什么新鲜的技巧,也不用装什么插件,而是用最原始的方式——将程序源代码转换为对应的html

blogger自带的日志编辑器功能比较弱。以前在blogger中贴程序源代码,都是在gmail里面用rich format编辑好,然后直接邮件发布。当我再用blogger的日志编辑器去修改这些日志时,日志中的程序源代码格式就会乱掉。最可能出现的情形就是代码的缩进丢失了。

大多数的带可视化模式和HTML模式的日志编辑器都存在一个问题:在可视化模式和HTML模式间切换的时候会将连续的空行(空格)合并为一个空行(空格)。这也就是导致我修改日志时把代码格式弄乱的原因。

除这一个问题之外,blogger日志编辑器还有另外几个问题,我以后会再写一篇日志详细说一说。这些问题加一起,让我感到很恶心,我不想再用可视化模式了,就干脆把blogger设置中Show Compose Mode for all your blogs?设置为"No",只用日志编辑器的HTML模式。写日志的时候稍微麻烦一点,但绝对可以保证日志格式正确。

那么,HTML模式下如何贴程序源代码呢?很简单,使用code标签。


<code>
...将程序源代码转换为Escaped Html后放在这里...
<code>

将程序源代码转换为escaped html是什么意思?就是将程序源代码中的一些特殊字符用转义字符来表示。比如,如果不将程序源代码中的联系的换行(空格)写成转义字符,那么HTML解析器会把连续的换行(空格)而当成一个换行(空格)。程序源代码的格式(尤其是缩进)就乱了。一般来说,程序源代码中下面这几个特殊字符需要使用转义字符来表示:

字符 转义字符
" &quot;
& &amp;
< &lt;
> &gt;
不间断空格(non-breaking space) &nbsp;
换行符 <br/>

VIA

比如下面这两行代码:

if (str=="HELLO" && i<0)
    return 1;

转换为Escaped Html就是:

if&nbsp;(str==&quot;HELLO&quot;&nbsp;&&&nbsp;i&lt;0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;

然后将这段html代码放在<code></code>标签中,原来的程序源代码就可以被正确的显示出来了。

那么,怎样才能方便的将程序源代码转换为escaped html呢?作为一个程序员,我的答案是自己写一个转换程序:


public static String encode(String src){
    String s = StringEscapeUtils.escapeHtml(src);
    StringBuilder sb = new StringBuilder();
    for(int i=0;i<s.length();i++){
        char t = s.charAt(i);
        switch(t){
        case ' ':
            sb.append("&nbsp;");
            break;
        case '\t':
            sb.append("&nbsp;&nbsp;&nbsp;&nbsp;");
            break;
        case '\n':
            sb.append("<br/>");
            break;
        case '\r':
            break;
        default:
            sb.append(t);
        }
    }
    return sb.toString();
}

注:我不确定是不是只有上面表中列出来的几个字符需要转义,所以在字符转义的部分我用了org.apache.commons.lang.StringEscapeUtils


Last modified on 2009-04-20