如何解码HTML实体?

Fra*_*ank 22 html perl ascii special-characters

这是一个快速的Perl问题:

我怎么能转换HTML特殊字符,如ü'正常的ASCII文本?

我从这样的事情开始:

s/\&#(\d+);/chr($1)/eg;
Run Code Online (Sandbox Code Playgroud)

并且可以为所有HTML字符编写它,但是这样的某些功能可能已经存在了?

请注意,我不需要完整的HTML->文本转换器.我已经使用了解析HTML HTML::Parser.我只需要用我正在获得的特殊字符转换文本.

Tel*_*hus 50

看看HTML :: Entities:

use HTML::Entities;

my $html = "Snoopy & Charlie Brown";

print decode_entities($html), "\n";
Run Code Online (Sandbox Code Playgroud)

你可以猜出输出.

  • 对于喜欢CLI的人来说,一个衬里:`perl -MHTML :: Entities -le'print decode_entities("¿'")` (2认同)

Mar*_*ler 21

上面的答案告诉你如何将实体解码为Perl字符串,但是你也问过如何将它们改成ASCII.

假设这真的是你想要的,你不想要所有的unicode字符,你可以从CPAN 看到Text :: Unidecode模块,将所有那些奇怪的字符重新转换成大致相似的ASCII字符集合:

use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);

my $source = '北亰';  
print unidecode(decode_entities($source));

# That prints: Bei Jing 
Run Code Online (Sandbox Code Playgroud)


yst*_*sth 6

请注意,也有十六进制指定的字符.它们看起来像这样:é (E).

使用HTML :: Entities的decode_entities将实体转换为实际字符.要将其转换为ASCII需要更多工作.我已经使用了iconv(perl接口:Text :: Iconv)和transliterate选项,并且过去取得了一些成功.但是,如果您正在处理一组有限的实体,或者您实际上并不需要将其简化为ASCII等效,那么您可能最好限制decode_entities产生的内容或为其提供自定义转换映射.请参阅HTML :: Entities文档.