perl – 使用带有HTML :: Laundry的utf8 pragma的宽字符错误
发布时间:2020-12-15 23:37:08 所属栏目:大数据 来源:网络整理
导读:我在使用 HTML::Laundry 模块时遇到问题.以下代码段演示了使用utf8时是否会发生的情况.启用使用utf8会导致错误: Wide character in subroutine entry at /usr/local/share/perl/5.14.2/HTML/Laundry.pm line 329 不使用utf8,结果是正确的,但在我的程序的上
我在使用
HTML::Laundry 模块时遇到问题.以下代码段演示了使用utf8时是否会发生的情况.启用使用utf8会导致错误:
Wide character in subroutine entry at /usr/local/share/perl/5.14.2/HTML/Laundry.pm line 329 不使用utf8,结果是正确的,但在我的程序的上下文中,我需要utf8 pragma. use utf8; use HTML::Laundry; use strict; my $snippet = "<p style="line-height: 18px; font-family: Verdana,Arial,Helvetica,sans-serif; color: rgb(153,153,153); margin: 0px; padding: 0px;"><br>S?mtliche Produkte von collec entstehen in Zusammenarbeit mit Schweizer Werkst?tten. collec setzt sich dafür ein,dass auch Menschen,die an geschützten Arbeitspl?tzen t?tig sind,hochwertige Produkte herstellen k?nnen. collec macht sich stark für die Erhaltung von Handarbeit und Handwerk,denn ?Handwerk berührt das Denken.“</p>"; my $clean = HTML::Laundry->new(); $clean->remove_acceptable_element(['font','span']); $clean->remove_acceptable_attribute(['class','style']); print $clean->clean($snippet); 程序文件本身是清晰的UTF-8 file -i cleantest.pl cleantest.pl: text/plain; charset=utf-8 解决方法
偷看
source,看起来HTML :: Laundry正在初始化
HTML::Parser并设置了
utf8_mode 标志.此标志使HTML :: Parser期望其输入作为未解码的UTF-8字节流而不是Unicode字符流.
您可能希望在HTML :: Laundry上提交有关此问题的错误报告/功能请求,并要求某种方法使其正确处理Unicode输入.但同时,还有一个明显的解决方法:只需将输入编码为UTF-8,然后再将其传递给HTML :: Laundry: use Encode qw(encode_utf8); print $clean->clean(encode_utf8 $snippet); 要么: utf8::encode($snippet); # encode to UTF-8 in place print $clean->clean($snippet); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |