如何解码HTML实体?
-
05-09-2019 - |
题
这是一个快速的问题:
我如何转换html特殊字符(例如 ü
或者 '
正常的ASCII文本?
我从这样的事情开始:
s/\&#(\d+);/chr($1)/eg;
并且可以为所有HTML字符编写它,但是某些功能可能已经存在?
请注意,我不需要完整的HTML->文本转换器。我已经用 HTML::Parser
. 。我只需要用我得到的特殊字符转换文本即可。
解决方案
看一眼 html ::实体:
use HTML::Entities;
my $html = "Snoopy & Charlie Brown";
print decode_entities($html), "\n";
您可以猜测输出。
其他提示
以上答案告诉您如何将实体解码为Perl字符串,但您还询问如何将它们更改为 ASCII.
假设这确实是您想要的,您不希望可以看的所有Unicode字符 文本:: UnideCode 从CPAN到所有这些奇数字符的模块回到了一个大致相似的ASCII字符集合:
use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);
my $source = '北亰';
print unidecode(decode_entities($source));
# That prints: Bei Jing
请注意,也有十六进制指定的字符。他们看起来像这样:é(é)。
使用html ::实体的decode_entities将实体转换为实际字符。将其转换为ASCII需要更多的工作。我已经使用了ICONV(Perl接口:Text :: ICONV)与过去的音译选项,过去有些成功。但是,如果您要处理有限的实体,或者实际上不需要将其简化为ASCII等效物,那么您可能会更好地限制Decode_entities产生的内容或为其提供自定义转换图。请参阅html ::实体文档。
有少数预定义的HTML实体 - &
"
>
等等 - 您可以硬编码。
但是,数量实体的较大案例 - {
- 将要困难得多,因为这些价值观是 Unicode, ,转换为ASCII的范围从 难的 至 不可能的.
不隶属于 StackOverflow