2017-04-27 6 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 pagesimbabque 링크 in his comment 에 그것을 표현 ' 또는 사용자 지정 엔터티 참조의 사용은 지원되지 않을 수도 있습니다

을 말한다 예측할 수없는 결과가 발생할 수 있습니다되지 않습니다.

HTML::Entities

표준

모듈의 임의의 반복에서 유효 하드 코딩 된 해시 %entity2char 사용 '로 인코딩 안전한 경로를 취하고, 인코딩을위한 역 매핑을 구축하는 데 사용 %char2entity. 아포스트로피에 대한 항목은 다음 명시 적으로 사용되는 숫자 개체를 강제로 삭제

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

당신이 다음 I를 통해 HTML5를 사용하여 저지하고자하는 경우

(주석은 원래의 코드에) 당신이 어떤 HTML::HTML5::Entities를 사용하는 것이 좋습니다 "HTML::Entities 교체에 드롭"하지만 내가 기억하는 지금까지로 '

+0

@BramVanroy : 제 답변의 업데이트를 참조하십시오. – Borodin