我在Perl中使用HTML::TreeBuilder
从html标记中提取一些文本。然后我使用$tree->look_down
方法获取我想要的标签。
但是,我要返回的文字可以是几种不同的语言,包括非拉丁字符。
如果我执行以下操作,我将获得字符的unicode十六进制字符串(例如ْ
),但也会获得html标记(例如div,span等):
my $valText = $text[0]->as_HTML();
如果我执行以下操作,我将仅获取打印字符(例如中文,阿拉伯语等),但不会获得unicode十六进制字符串
my $valText = $text[0]->as_text;
如何才能获得unicode十六进制字符串和没有标记?
答案 0 :(得分:2)
我建议你在字符串上使用表达式替换
而不是试图让模块做一些它没有设计的东西。该程序将字符串中所有非ASCII字符的表示形式更改为十六进制字符实体。我已经使用了U+0652 ARABIC SUKUN
,因为这是问题中的例子,但是你可能知道这是一个很小的非间距标记,所以我担心它不是{&1;}。在输出中非常明显! (这就是你想要看到十六进制实体值的原因吗?)
use utf8;
use strict;
use warnings;
use v5.10;
use open qw/ :std :encoding(utf-8) /;
my $s = "abc\x{0652}xyz";
say $s;
$s =~ s/([\x{80}-\x{ffff}])/sprintf '&#x%04x;', ord $1/ge;
say $s;
abcْxyz
abcْxyz
答案 1 :(得分:0)
我能想到的最简单的方法是从as_HTML()的结果中删除标签:
my $valText = $text[0]->as_HTML();
# strip away all the tags
$vatText =~ s/<.*?>//g;