2017-04-27 72 views
0

我想做一些简单的事情,编码一个撇号,其实体名称为而不是它的(十六进制)十进制数。但是,似乎HTML ::实体不能这样做。HTML ::实体和编码撇号

use warnings; 
use strict; 

use HTML::Entities qw(encode_entities); 

my $char = "'"; 

print encode_entities($char); 
# ' 

然而,在导出的散列从实体到字符去,撇号呈现为apos

print $HTML::Entities::entity2char{'apos'} 
# ' 

为什么某些字符的HTML实体名称不可用?还是应该以这种或那种方式强迫?

+0

至于我记得,不是所有的实体都有名字。 https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML有一个列表。 – simbabque

+0

为什么要'''而不是'''? – Borodin

+0

@Borodin我们在文件名中使用了一些特殊字符作为标识符,并且将它们用语义透明的名称进行分类会很好。换句话说,“'比'''更清晰。 –

回答

3

字符实体'仅在HTML5中引入,在HTML4及更早版本中无效。有些浏览器将不能代表它正确

Wikipedia pagesimbabque链接 in his comment 说,这

采用'或自定义实体引用可能不支持并可能产生不可预知的结果。

HTML::Entities需要编码它作为'的安全路线,其是在标准

该模块的任何迭代有效使用硬编码的哈希%entity2char,并使用它来建立在用于编码的逆映射%char2entity。对于撇号的条目则显式删除强制数字实体使用

delete $char2entity{"'"}; # only one-way decoding 

(该评论是在原码)

如果你愿意承诺使用HTML5整个然后 我建议你使用HTML::HTML5::Entities这是一个 “落更换为HTML::Entities 但提供了所有的标准HTML5的实体,包括'

+0

@BramVanroy:请参阅我的答案更新。 – Borodin