Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解码HTML实体?_Html_Perl_Ascii_Special Characters - Fatal编程技术网

如何解码HTML实体?

如何解码HTML实体?,html,perl,ascii,special-characters,Html,Perl,Ascii,Special Characters,下面是一个简单的Perl问题: 如何转换HTML特殊字符,如ü或'到普通ASCII文本 我是这样开始的: s/\&#(\d+);/chr($1)/eg; 可以为所有HTML字符编写,但是像这样的函数可能已经存在了 请注意,我不需要完整的HTML->文本转换器。我已经用HTML::Parser解析了HTML。我只需要用我得到的特殊字符转换文本。看一下: 您可以猜测输出。有一些预定义的HTML实体-&“等等-您可以硬编码 然而,更大的数字实体案例-{;-将更加

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

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

我是这样开始的:

s/\&#(\d+);/chr($1)/eg;
可以为所有HTML字符编写,但是像这样的函数可能已经存在了

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

看一下:


您可以猜测输出。

有一些预定义的HTML实体-
&
等等-您可以硬编码


然而,更大的数字实体案例-
{;
-将更加困难,因为这些值是,转换为ASCII将从困难到不可能。

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

使用HTML::Entities的decode_实体将实体转换为实际字符。将其转换为ASCII需要更多的工作。我使用了iconv(perl接口:Text::iconv) 使用音译选项在过去取得了一些成功。但是如果你正在处理 使用有限的一组实体,或者您实际上不需要将其简化为ASCII等价物, 您最好限制decode_实体生成的内容或为其提供自定义内容
转换映射。请参阅HTML::Entities文档。

上述答案告诉您如何将实体解码为Perl字符串,但您也询问了如何将其转换为ASCII

假设这真的是您想要的,并且您不想要所有的unicode字符,您可以查看CPAN模块,将所有这些奇怪的字符转换回大致相似的ASCII字符集合:

use Text::Unidecode qw(unidecode);
use HTML::Entities qw(decode_entities);

my $source = '北亰';  
print unidecode(decode_entities($source));

# That prints: Bei Jing 

我使用这个脚本。将它另存为
html2utf.py
,并使用它ala
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')))

完全正确,贝文。没有从Unicode到“纯ASCII”的反向翻译。乔尔写了一篇关于文本编码的非常好的文章,德尔曼应该读一下……所有关于“纯文本=ASCII=字符”的东西都是8位的“这不仅是错误的,而且是无可救药的错误,如果你仍然以这种方式编程,你也不比一个不相信细菌的医生强多少。”Perl:…为那些喜欢CLI的人带来了困难:
Perl-MHTML::Entities-le'print decode_Entities(¿;&39;”)
#!/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')))