HTML ::实体和编码撇号

时间:2017-04-27 09:35:00

标签: perl encoding html-entities

我想做一些简单的操作,例如使用实体名称​​编码撇号而不是其(十六进制)十进制数。但是,似乎HTML :: Entities无法做到这一点。

use warnings;
use strict;

use HTML::Entities qw(encode_entities);

my $char = "'";

print encode_entities($char);
# '

但是,在从实体到字符的导出哈希中,撇号显示为apos

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

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

1 个答案:

答案 0 :(得分:3)

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

Wikipedia page simbabque 链接到 in his comment 说这个

  

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

HTML::Entities采用安全路径将其编码为',这在标准的任何迭代中都有效

该模块使用硬编码哈希%entity2char,并使用它在%char2entity中构建用于编码的逆映射。然后显式删除撇号的条目以强制使用数字实体

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

(评论在原始代码中)

如果您愿意承诺在整个过程中使用HTML5 我建议您使用HTML::HTML5::Entities这是一个 HTML::Entities的替代品 但提供所有标准HTML5实体,包括'