这是一个快速的Perl问题:
我怎么能转换HTML特殊字符,如ü
或'
正常的ASCII文本?
我从这样的事情开始:
s/\(\d+);/chr($1)/eg;
并且可以为所有HTML字符编写它,但是这样的某些功能可能已经存在了?
请注意,我不需要完整的HTML->文本转换器.我已经使用了解析HTML HTML::Parser
.我只需要用我正在获得的特殊字符转换文本.
看看HTML :: Entities:
use HTML::Entities; my $html = "Snoopy & Charlie Brown"; print decode_entities($html), "\n";
你可以猜出输出.
上面的答案告诉你如何将实体解码为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
请注意,也有十六进制指定的字符.它们看起来像这样:é (E).
使用HTML :: Entities的decode_entities将实体转换为实际字符.要将其转换为ASCII需要更多工作.我已经使用了iconv(perl接口:Text :: Iconv)和transliterate选项,并且过去取得了一些成功.但是,如果您正在处理一组有限的实体,或者您实际上并不需要将其简化为ASCII等效,那么您可能最好限制decode_entities产生的内容或为其提供自定义转换映射.请参阅HTML :: Entities文档.