星期四, 12月 18, 2008

HTML Tidy Eclipse中文處理

最近有訂閱在下的巴布/Twitter的朋友,應該知道小弟這幾天想把企業內部的IE only網頁改成標準符合W3C語法,並將舊的big5網頁改為utf-8。除了難搞的IE DHTML和標準DOM差很多之外,早期全大寫的html tag在Aptana看到實在很不順眼,還有屬性內容沒有加上"或',就興起找工具來處理的念頭。

最有名的工具當然就是HTML Tidy,中文預設輸出成unicode表示法,但還是可以加上 -utf8 的參數強制輸出成 utf-8。

Aptana 1.2.0版之後內建很類似HTML Tidy Eclipse Plug-in的HTML Tidy功能,居然也有相同的Bug:設定成utf-8後中文輸出亂碼。

由於HTML Tidy Eclipse Plug-in使用JTidy這個2001年之後沒動過的project,於是就從這裏下手。(警告:以下hack非常dirty,而且只在utf-8編碼系統有效,只在Ubuntu上成功,Win32無效)

下載jtidy-04aug2000r7-dev.zip解開後,
在jtidy-04aug2000r7-dev/src/org/w3c/tidy/Configuration.java第471列,把int result = ASCII; 改成 int result = UTF8;
另外Aptana版的HTML Tidy不能關掉generator訊息,因此我把 Lexer.java第522列的addGenerator(Node root)裏的內容直接改成 return true;
在編輯時會有enum是keyword的錯誤訊息,所以再改Configuration.java第126~129頁的enum變數名稱為enu。
接下來在jtidy-04aug2000r7-dev目錄下輸入 ant 命令就會在build目錄下產生Tidy.jar。
把新做的Tidy.jar覆蓋aptana/plugins/com.aptana.ide.libraries_1.2.1.18697 (隨著版次數字會變)下的Tidy.jar即可。(這裏放一份我做的)

在Win32下要改編碼建議用ConvertZ,在Linux當然就用iconv,轉碼為UTF-8後就直接用Aptana編輯,Run HTML Tidy後若不習慣Tidy的縮排方式,再Format一次後HTML碼就很漂亮(為什麼Aptana不能直接整合呢?)。

星期一, 12月 15, 2008

Googlt Bot會找漏洞

今天看到網站多久沒健檢了,就用SQLInjectionFinder掃一下Log,發現有個IP在掃SQL Injection漏洞,字串裏有CAST(...。
IP是:66.249.70.180,沒想到原來是Googlebot,這是怎樣呀?幫我掃有沒有SQL Injection的漏洞?看來要寫個robots.txt了。


Update:不知為何微軟把SQLInjectionFinder的下載移除,我放一份SQLInjectionFinder在 http://www.badongo.com/file/12617378
MD5Sum為 2b1896c5fb676447c51f79026d12397d

星期一, 12月 08, 2008

OpenWebMail 有更新了

最近在FreeBSD 做 portupgrade 時發現 OpenWebMail 常有更新,查了change log發現最近幾個月有人在修正bug,以前不堪用的utf-8,也變成不錯用。

今天把預設語系改成utf-8,大部份big5信件標題不再是亂碼,在預設的gb2312->utf-8轉換失敗時也可以手動把語系改成gb2312直接閱讀,總算變得比較好用了。

更重要的是,收到UTF-8信件已經不會在標題出現[UTF-8?]的字,用Windows Live Mail收UTF-8標題也正常,看來email終於進化到全UTF-8的時代,可以不再預設用Big5寫信。

星期五, 12月 05, 2008

簡單的同步程式

最近有個簡單的檔案同步需求,只增不刪的單向同步,因此寫了一支小程式。

剛好看到Java application frameworks come to .NET,二話不說就用C#寫。

完整程式如下:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace DirSync
{
class DirSync
{
static void Main(string[] args)
{
if (args.Length < filepathnames =" Directory.GetFileSystemEntries(Src);" destfilepathname =" Dst"> 0)
{
// 若 source時間比較晚則覆寫
FileCopyWithException(pathname, destFilePathName);
}
}
else
{
FileCopyWithException(pathname, destFilePathName);
}
}
}
}

private static void FileCopyWithException(string pathname, string destFilePathName)
{
try
{
File.Copy(pathname, destFilePathName, true);
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
}
}
}
檔案授權為GPL,你不公開是你家的事,I won't sue you.

星期三, 12月 03, 2008

FreeBSD上libtool的錯誤

今天要把 clamav升級到0.94.2時出現 libtool: unknown library version type `freebsd-' 的錯誤訊息。

查了一下,裏說把/usr/bin/objformat移掉就可以。
發現系統上的/usr/bin/objformat日期果然是幾年前,再去 /usr/src/usr.bin/objformat看,原來objformat.sh的註解說
/usr/bin/objformat has been obsolete and deprecated for years.
(略)
FreeBSD-5.x and higher only support elf.
所以就直接 rm /usr/bin/objformat
可是真不懂,為什麼會在我升級kernel到 FreeBSD 7.0-RELEASE-p6 才出問題,之前升到7.0也用了一年多怎麼都沒事?