1

在 Perl 中,如何将包含 utf-8 字符的字符串转换为 HTML,其中这些字符将转换为&...; ?

4

2 回答 2

3

首先,拆分一个空模式以获取单个字符的列表。然后,将每个字符映射到自身,如果它是 ASCII,或者它的代码,如果不是:

use Encode qw( decode_utf8 );

my $utf8_string = "\xE2\x80\x9C\x68\x6F\x6D\x65\xE2\x80\x9D";
my $unicode_string = decode_utf8($utf8_string);

my $html = join q(),
    map { ord > 127 ? "&#" . ord . ";"
                    : $_
        } split //, $unicode_string;
于 2012-10-08T23:16:09.473 回答
2

ord只需简单地计算其+ 必要的 HTML 实体格式,即可替换每个不可打印且非低 ASCII 符号(即 \x20 - \x7F 区域之外的任何符号) 。Perl 正则表达式有/e标志来指示替换应该被视为代码。

use utf8;
my $str = "testТест"; # This is correct UTF-8 string right in the code
$str =~ s/([^[\x20-\x7F])/"&#" . ord($1) . ";"/eg;
print $str;
# testТест
于 2013-07-16T15:54:21.703 回答