这是一个快速的问题:

我如何转换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的范围从 难的不可能的.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top