Perl 将utf-8转换为html;。。。;

Perl 将utf-8转换为html;。。。;,perl,Perl,在Perl中,如何将包含utf-8字符的字符串转换为HTML,并将这些字符转换为&?首先,以空模式拆分以获得单个字符的列表。然后,将每个字符映射到自身(如果是ASCII),或将其代码映射到非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 $ht

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

首先,以空模式拆分以获得单个字符的列表。然后,将每个字符映射到自身(如果是ASCII),或将其代码映射到非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;

首先,在空模式上拆分以获得单个字符的列表。然后,将每个字符映射到自身(如果是ASCII),或将其代码映射到非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;

只需用其
ord
+必要的HTML实体格式的简单计算替换每个不可打印且不低ASCII(即\x20-\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Тест

只需用其
ord
+必要的HTML实体格式的简单计算替换每个不可打印且不低ASCII(即\x20-\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Тест

我的字符串包含多字符的utf-8字符-例如,这是示例的十六进制:
e280 9C 68 6F 6D 65 E2 80 9D
,它表示
“home”
我建议的代码返回
“;家”。这是您想要的吗?不,不是,但现在是。那么字符串不是utf-8。@ikegami-感谢您的修复,现在它是了。我的字符串包含utf-8字符作为多字符-例如,这是示例的十六进制:
e280 9C 68 6F 6D 65 e280 9D
,它表示
“home”
我建议的代码返回
&&8220;家”。这是你想要的吗?不,它没有,但现在它有了。那么,字符串不是utf-8。@ikegami-谢谢你的修复,现在它有了。