HTML::Tidy Windows 换行问题

标签 html windows perl newline htmltidy

当在 Windows 上使用 HTML::Tidy 清理 HTML::Element as_HTML 方法的输出时,我得到了错误类型的换行符。如果我没有在 HTML::Tidy 构造函数中指定换行符,我的行将以 CCRRLF 终止。如果我指定“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 库的一般错误之外,我找不到其他人真正提到的问题。有没有人处理过这个问题并且可以确认这是一个库错误?如果是这样我会感到惊讶,因为图书馆已经存在了很长时间,并且想在提交报告之前确认。

编辑:我更新了代码以显示文件句柄的创建。可以通过将文件句柄 binmode 设置为原始来解决此问题,但由于 Unicode 而出现问题在 HTML 内容中。有没有办法在不插入其他问题的情况下解决它?

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

最佳答案

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

binmode($output);

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

关于HTML::Tidy Windows 换行问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994727/

相关文章:

javascript - 如何序列化表单,而不是输入的值获取输入的 ID

linux - 删除所有 node_modules 子文件夹

arrays - Perl 将一个数组放入特定列的二维数组中

perl - 如何在Perl中的变量内 "store"运算符?

regex - 扩展 [可选]、分组和 |或文本中的运算符

javascript - 未捕获的类型错误 : Object #<HTMLLIElement> has no method 'has'

html - 更多 CSS 对齐问题

windows - 有没有办法以编程方式将焦点集中到 Windows 中的应用程序?

c++ - Windows 受限用户安装

html - 用于在 div 内填充文本的 CSS 属性