HTML ::整理Windows换行问题

时间:2011-02-14 16:43:48

标签: html windows perl newline htmltidy

在Windows上使用HTML :: Tidy来清理HTML :: Element as_HTML方法的输出时,我得到了错误的换行符。如果我没有在HTML :: Tidy构造函数中指定换行符,我会通过CRCRLF终止我的行。如果我指定'LF'终止,我得到'CRLF',如果我指定'CRLF',我得到原始的CRCRLF终止。我怀疑这是HTMLtidy库中的一个错误,并且很容易通过明确指定Unix终止并将DOS输出来解决,这几乎任何体面的编辑器都可以在任何平台上解析。

每个回答,我在适当的句柄上使用binmode':raw: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库的一般冗余之外,我无法真正提到其他人有问题。有没有人处理过这个问题并且可以确认这是一个库错误?如果是这样的话,我会感到惊讶,因为图书馆已存在多年,并且想在提交报告之前确认。

编辑:我更新了代码以显示文件句柄创建。可以通过将filehandle binmode设置为raw来解决该问题,但是由于HTML内容中的Unicode,我遇到了问题。有没有办法解决它而不插入其他问题?

编辑2:我应该注意到我最初将此视为HTML :: Tidy问题,因为使用任何binmode将直接$ tree-> as_HTML()打印到文件句柄会产生正确的EOL字符。一旦我将标量HTML :: Element输出作为带有HTML :: Tidy的HTML代码包装,这个问题才会体现出来。

1 个答案:

答案 0 :(得分:2)

试图使输出文件成为二进制文件:

binmode($output);

我在Template Toolkit输出中遇到了类似的问题。