【问题标题】:HTML::Entities and encoding an apostropheHTML::Entities 和编码撇号
【发布时间】:2017-09-25 00:37:08
【问题描述】:

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

【问题讨论】:

  • 据我记忆,并不是所有的实体都有名字。 en.wikipedia.org/wiki/… 有一个列表。
  • 你为什么要'而不是'?
  • @Borodin 我们在文件名中使用一些特殊字符作为标识符,最好用语义透明的名称对它们进行分类。换句话说,apos 比' 清晰得多。
  • 你可以把它放回%HTML::Entities::char2entity,并希望使用你页面的浏览器表现良好。

标签: perl encoding html-entities


【解决方案1】:

字符实体' 仅在 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 实体,包括 '

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 2013-01-04
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多