代码之家  ›  专栏  ›  技术社区  ›  Frank

如何解码HTML实体?

  •  21
  • Frank  · 技术社区  · 16 年前

    下面是一个简单的Perl问题:

    如何转换HTML特殊字符,如 ü ' 普通的ASCII文本?

    我是这样开始的:

    s/\&#(\d+);/chr($1)/eg;
    

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

    请注意,我不需要完整的HTML->文本转换器。我已经用 HTML::Parser . 我只需要用我得到的特殊字符来转换文本。

    4 回复  |  直到 10 年前
        1
  •  49
  •   cjm    16 年前

    看一看 HTML::Entities :

    use HTML::Entities;
    
    my $html = "Snoopy & Charlie Brown";
    
    print decode_entities($html), "\n";
    

    你可以猜测输出。

        2
  •  21
  •   Mark Fowler    16 年前

    上面的答案告诉您如何将实体解码为Perl字符串,但您还询问了如何将这些实体转换为 ASCII .

    假设这确实是您想要的,并且您不需要所有Unicode字符,您可以查看 Text::Unidecode 从cpan到zap的模块将所有这些奇数字符返回到大致相似的ASCII字符集合中:

    use Text::Unidecode qw(unidecode);
    use HTML::Entities qw(decode_entities);
    
    my $source = '北亰';  
    print unidecode(decode_entities($source));
    
    # That prints: Bei Jing 
    
        3
  •  6
  •   ysth    16 年前

    请注意,也有十六进制指定字符。它们看起来像这样:&xe9;()。

    使用html::entities'解码实体以将实体转换为实际字符。要将其转换为ASCII,需要做更多的工作。我使用了iconv(perl接口:text::iconv) 使用transliterate选项,在过去取得了一些成功。但如果你在交易 对于一组有限的实体,或者您实际上不需要将其缩减为ASCII等价物, 您最好限制解码实体生成的内容或为其提供自定义 转换映射。请参见html::entities文档。

        4
  •  3
  •   Bevan    16 年前

    有一些预定义的HTML实体- & " > 等等-你可以硬编码。

    然而,数量实体的较大情况- { -会更加困难,因为这些价值观 Unicode ,到ASCII的转换范围从 困难的 不可能的 .