这是一个快速的Perl问题:
如何将ü
或'
等HTML特殊字符转换为普通的ASCII文本?
我从这样的事情开始:
s/\&#(\d+);/chr($1)/eg;
并且可以为所有HTML字符编写它,但是这样的某些功能可能已经存在了?
请注意,我不需要完整的HTML->文本转换器。我已使用HTML::Parser
解析HTML。我只需要用我正在获得的特殊字符转换文本。
答案 0 :(得分:50)
use HTML::Entities;
my $html = "Snoopy & Charlie Brown";
print decode_entities($html), "\n";
你可以猜出输出。
答案 1 :(得分: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
答案 2 :(得分:6)
请注意,也有十六进制指定的字符。它们看起来像这样:é (E)。
使用HTML :: Entities的decode_entities将实体转换为实际字符。要将其转换为ASCII需要更多工作。我用过iconv(perl接口:Text :: Iconv) 与音译选项在过去取得了一些成功。但如果你正在交易 使用有限的实体集,或者您实际上并不需要将其缩减为ASCII等价物, 你可能最好限制decode_entities生成或提供自定义 转换图。请参阅HTML ::实体文档。
答案 3 :(得分:3)
有一些预定义的HTML实体 - &
"
>
等等 - 您可以进行硬编码。
但是,较大的数字实体 - {
- 会更加困难,因为这些值为Unicode,转换为ASCII的范围将从困难 不可能。
答案 4 :(得分:0)
我使用此脚本。将其另存为html2utf.py
,并在echo $some_html | html2utf.py
中使用。
#!/usr/bin/env python3
"""
An alternative for `perl -Mopen=locale -MHTML::Entities -pe '$_ = decode_entities($_)'` (which you can use by `cpanm HTML::Entities`) and `recode html..`.
"""
import fileinput
import html
for line in fileinput.input():
print(html.unescape(line.rstrip('\n')))