在
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代码包装起来,这个问题才会体现出来.
最佳答案 试图使输出文件二进制:
binmode($output);
我在Template Toolkit输出中遇到了类似的问题.