HTML::Entities 并编码撇号

HTML::Entities and encoding an apostrophe

我想做一些简单的事情,比如用实体名称而不是(十六进制)十进制数 对撇号进行编码。不过,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 实体名称不可用?还是应该以某种方式强制执行?

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

Wikipedia page simbabque 链接到 说这个

The use of ' or custom entity references may not be supported and may produce unpredictable results.

HTML::Entities 采用将其编码为 ' 的安全路线,这在标准

的任何迭代中均有效

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

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

(注释在原代码中)

如果您愿意承诺在整个过程中使用 HTML5 我建议你使用 HTML::HTML5::Entities 这是一个 "drop-in replacement for HTML::Entities" 但提供所有标准 HTML5 实体,包括 '