2017-04-27 101 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