2011-02-14 59 views
4

當在Windows上使用HTML :: Tidy清理HTML :: Element as_HTML方法的輸出時,我得到錯誤類型的換行符。如果我沒有在HTML :: Tidy構造函數中指定換行符,我的行就會被CRCRLF終止。如果我指定'LF'終止,我會得到'CRLF',如果我指定'CRLF',我會得到原始的CRCRLF終止。我懷疑這是HTMLtidy庫中的一個錯誤,並且很容易通過明確指定Unix終止和獲取DOS來完成,幾乎任何像樣的編輯器都可以在任何平臺上解析。HTML ::整潔的Windows換行問題

每答案,我決定使用binmode問題「:原料:UTF8」在適當的手柄禁用/n插補:

my $output = IO::File->new($ARGV[1], 'w'); 
$output->binmode(':raw:utf8'); 
print $output HTML::Tidy->new({ wrap => 80, 
           indent => 'auto', 
           'wrap-attributes' => 'yes', 
           } 
          )->clean($tree->as_HTML()); 

這是很普通的,但我找不到別人的真正提除了HTMLtidy庫的一般bugginess之外還有問題。有沒有人處理過這個問題,可以確認這是一個庫錯誤?如果是這樣,我會很驚訝,因爲圖書館已經存在很久了,並且希望在提交報告之前進行確認。

編輯:我更新了代碼以顯示文件句柄的創建。該問題可以通過將文件句柄binmode設置爲raw來解決,但是由於HTML內容中的Unicode,我遇到了問題。有沒有辦法解決它而不插入其他問題?

編輯2:我應該注意到我最初把它看作HTML :: Tidy問題,因爲用任何binmode打印一個直的$ tree-> as_HTML()到文件句柄導致了正確的EOL字符。一旦我用HTML :: Tidy作爲HTML代碼包裝標量HTML :: Element輸出時,問題就會顯現出來。

回答

2

試圖使輸出文件的二進制:

binmode($output); 

我曾與模板工具包輸出類似的問題。

+0

它實際上是輸出unicode,但這有些幫助。設置':raw'確實輸出正確的EOL字符。將其作爲默認binmode留給與unicode binmode相同的問題。然而,對於原始和默認情況下,打印當然抱怨將寬Unicode字符打印到文件句柄。 – Oesor 2011-02-14 18:53:12