我平时喜欢用Word写Blog,但当用它打开已经发布的文章时,会将默认字体变成小四,再次发布后字体变大不少。例如,我最初的文章是:
<p>Hello 123</p>
当用Word打开,再次发布后生成的html代码如下:
<p><span style="font-family:宋体; font-size:12pt">Hello 123</span></p>
就和原来的不一样了,整篇文章字变大了不少。
我最初以为是博客园的bug,还给园子提过问题,后来得到回复是这个是Word的Bug。便自己抓包看了下,这个这个确实是Word的Bug,打开文章是并没有返回样式信息,但Word却自主的给默认字体加上了小四的样式,用别的博客工具打开就没有这个问题。不过这个Bug只要不打开重新编辑就没有问题,影响不太大,也就懒得管它了。
这两天想把之前写的两篇文章给改一下,然后就被这个Bug给郁闷了。虽然别的Blog客户端没有这个Bug,但它们的编辑能力和Word不是一个级别的。在网上搜了下,也没有找到什么方法,也不可能指望Word能主动解决这个Bug,那么就只能自己动手解决这个Bug了。
我以前写过一个工具,用于解决Word无法发布图片的Bug——用word2007在博客园发布带图片的blog。要解决这个问题,思路是一样的:写一个代理程序,捕获Word发布的Blog文章,修改后转发给服务器。由于那篇文章写得很古老,代码早就被我删了,因此无法参考。另外,原来的那个代码有个比较麻烦的地方,就是得自己虚拟一个新账户来转发文章,设置和使用都比较麻烦。
参考了以前的方案和问题,这次采用的方案是:写一个代理程序,启动后修改系统代理设置为该程序,即可自动捕获Word发布的Blog文章,修改后转发给服务器。制定完修改方案后,感觉就是一个小型的Fiddler,就干脆用Fiddler实现了,由于Fiddler已经完成了大部分的工作,因此我要实现的关键代码就三行:
FiddlerApplication.BeforeRequest += oS =>
{
if (!oS.fullUrl.Contains("/TianFang/services/metaweblog.aspx"))
return;
oS.bBufferResponse = true;
oS.utilReplaceInRequest("style=\"font-family:宋体; font-size:12pt\"", "");
};
为了更好的使用它,我写了一个WinFrom版的程序(.net 2.0环境):点击下载
这个程序使用非常简单,什么都不用设置。只要在用的时候把它打开,当要发布修改后的文章时,会自动去掉那个多余的小四字号的设置。
注意事项:
-
默认的API地址可能只适用于博客园,如果要使用其它的Blog请修改其API地址,程序会自己记忆,下次打开时仍会使用该地址。
-
该程序修改了全局的代理设置,可能影响上网的网速,因此,在不用的时候最好不要打开它。