【问题标题】:Numerical reference encoding for PerlPerl 的数字参考编码
【发布时间】:2015-09-29 11:00:13
【问题描述】:

我遇到了 Perl 问题。我正在尝试使用HTML::Entities 来编码它所做的字符串。但是我正在尝试将其转换为数字参考。例如:

use strict;
use warnings;
use LWP::Protocol::https;
use HTML::Entities;


my $str = "vis-à-vis Beyoncé's naïve\npapier-mâché résumé";
$str = encode_entities($str);

print $str;

这个输出

vis-à-vis Beyoncé's naï
papier-mâché résumé

相反,我想输出

vis-à-vis beyoncè naïve\npapier-mâchï rïsumï";

这里的问题是我不想使用这种类型的编码 (à),而是使用这种类型 (à)。

【问题讨论】:

  • 使用子程序 encode_entities_numeric。该例程默认不导出。
  • @Pradeep 请将其添加为答案。
  • @Pradeep 通过使用这个我得到(hexnum;)但是我想要的是 unicode(num;)。即我得到vis-à-vis Beyoncé's naïve papier-mâché résumé 而不是vis-à-vis beyoncè naïve\npapier-mâchï rïsumï"; 看到区别了吗?
  • Jethro:你为什么关心你的数字是十六进制还是十进制?

标签: perl character-encoding


【解决方案1】:

我有一个使用正则表达式的简单解决方案,可以得到你需要的,下面是代码:

use HTML::Entities qw[encode_entities_numeric];
use utf8;

my $str = "vis-à-vis Beyoncé's naïve\npapier-mâché résumé";
$str = encode_entities_numeric($str);

print "\n=======\n",$str,"\n=======\n";

$str =~ s/&#x([A-F0-9]+);/sprintf('&#%s;',hex($1))/ge;

print "\n=======\n",$str,"\n=======\n";

输出看起来像这样:

=======
vis-à-vis Beyoncé's naïve
papier-mâché résumé
=======

=======
vis-à-vis Beyoncé's naïve
papier-mâché résumé
=======

找到十六进制代码的模式,并将其转换为十进制格式。

【讨论】:

  • 嗨@pradeep 这仍然没有给出理想的结果请注意 é 的 unicode 是 ï 但正则表达式将其转换为 &#233 所以代码的输出是 vis-A -vis BeyoncAc's naA-ve papier-mAcchAc rAcsumAc 而不是vis-à-vis beyoncè naive\npapier-machi risumi.
  • @JETHROKANE code for é 是 233,你可以在utf8-chartable.de/… 验证它&对于不正确的输出,检查你的浏览器/终端是否支持 utf8
猜你喜欢
  • 2013-02-11
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
相关资源
最近更新 更多