使用HTML :: Element提取Unicode Hex字符串

时间:2015-09-24 18:16:39

标签: html perl unicode

我在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十六进制字符串没有标记?

2 个答案:

答案 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;