2013-10-11 2 views
2
에 엔티티 문자 '&'<>로 변환하는 방법

펄에 특수 기호를 엔티티 &quot; &amp; &apos; &lt; &gt;-"&'<>를 변환하는 펄 가장 간단한 방법은 무엇입니까? 다음과 같은 기능을 쓰기 쉽게,하지만 난 이 문제는 시간을 많이 해결되었고, 자신의 기능을 쓸 필요가 없다 생각합니다." & ' < > 펄

sub add_entities { 
    my ($text) = @_; 

    $text =~ s/&/&amp;/g; 
    $text =~ s/"/&quot;/g; 
    $text =~ s/'/&apos;/g; 
    $text =~ s/</&lt;/g; 
    $text =~ s/>/&gt;/g; 

    return $text; 
} 

sub remove_entities { 
    my ($text) = @_; 

    $text =~ s/&quot;/"/g; 
    $text =~ s/&amp;/&/g; 
    $text =~ s/&apos;/'/g; 
    $text =~ s/&lt;/</g; 
    $text =~ s/&gt;/>/g; 

    return $text; 
} 
+6

[HTML :: Entities] (http://search.cpan.org/~gaas/HTML-Parser-3.71/lib/HTML/Entities.pm) – raina77ow

+2

@ raina77ow, HTML에 '''이 없습니다. 그래서 OP가 XML을 다루는 것 같습니다. HTML :: Entities는 XML에 적합하지 않습니다 (아마도 XHTML 제외). (OP의 verison이 그리 좋지는 않지만, 너무 끔찍하게 손상되어 있습니다.) – ikegami

+0

XML을 쓰면 XML 라이팅 라이브러리 (및 자체 탈출 툴)를 사용하는 것이 더 좋습니다. 나는 'use XML :: LibXML'이 주어진 질문에 대한 적절한 대답이라고 동의하지 않는다.) – raina77ow

답변

0

혹시 remove_entities 필요하지 않아야합니다. 귀하의 파서가 어떤 개체를 반환하지 않아야합니다. 당신이 끔찍하게 깨진 것 같다 XML :: LibXML을 사용하는 것이 좋습니다.

동일한 내용은 add_entities XML에 해당합니다. XML 작성 라이브러리가 모든 것을 처리합니다. 이 경우에도 XML :: LibXML을 사용할 수 있지만 XML :: Writer는이 작업에 훨씬 더 간단합니다.

두 루틴 모두 끔찍한 손상이 있음에 유의하십시오. add_entities은 문자 집합을 고려하지 않습니다. remove_entities은 기본 XML 스펙 외부의 숫자 및 엔티티를 처리하지 않습니다.

관련 문제