2017-04-27 9 views
0

エンティティ名がで、(ヘキサ)10進数ではないのアポストロフィをエンコードするだけの簡単なことをしたい。しかし、HTML :: Entitiesではこれができないようです。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

を含め、すべての標準的なHTML5のエンティティを提供し、すべてのエンティティが名前を持っているわけではありません。 https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTMLにはリストがあります。 – simbabque

+0

なぜ「'」の代わりに「'」が必要ですか? – Borodin

+0

@Borodin私たちは、ファイル名の中でいくつかの特殊文字を識別子として使用しています。それらを意味的に透明な名前で分類するといいでしょう。つまり、 'apos'は' ' 'よりはるかに明確です。 –

答えて

3

文字エンティティ'はHTML5にのみ導入され、HTML4以前では無効です。一部のブラウザでは正しく

Wikipedia page そのsimbabqueリンク in his comment にそれを表現'またはカスタムエンティティ参照の使用はサポートされない場合があり、この

を言うと、予期しない結果が生じることはありません。

HTML::Entitiesモジュールはハードコードされたハッシュ%entity2charを使用し、内符号化の逆マッピングを構築するためにそれを使用する標準

の任意の反復において有効である'としてコードの安全な経路をとります%char2entity。アポストロフィのエントリは、その後、明示的に使用される数値エンティティを強制的に削除され

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

あなたが I全体でHTML5を使用してコミットして喜んでいる場合

(コメントは、元のコードです)あなたがあるHTML::HTML5::Entitiesを使用することを示唆している HTML::Entitiesの代替にドロップ」が、私は覚えている限り'

+0

@BramVanroy:私の答えのアップデートをご覧ください。 – Borodin

関連する問題