在Perl中,如何将包含utf-8字符的字符串转换为HTML,将这些字符转换为& ...; ?
答案 0 :(得分: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;
答案 1 :(得分:2)
只需简单计算其ord
+必要的HTML实体格式,即可替换不可打印且不是低ASCII的所有符号(即,x x - \ x7F区域以外的任何符号)。 Perl regexp有/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Тест