2009-02-22 15 views
21

यहां एक त्वरित पर्ल सवाल है:मैं HTML इकाइयों को कैसे डीकोड कर सकता हूं?

मैं कैसे सामान्य ASCII पाठ करने के लिए ü या ' तरह HTML विशेष वर्ण में बदल सकते हैं?

मैं कुछ इस तरह के साथ शुरू किया:

s/\&#(\d+);/chr($1)/eg; 

और सभी HTML पात्रों के लिए यह लिख सकता है, लेकिन इस तरह की कुछ समारोह शायद पहले से ही मौजूद है?

ध्यान दें कि मैं एक पूर्ण html-> पाठ कनवर्टर की जरूरत नहीं है। मैं पहले से ही HTML::Parser के साथ HTML पार्स। मुझे टेक्स्ट को विशेष वर्णों के साथ बदलने की जरूरत है।

उत्तर

47

HTML::Entities पर एक नज़र डालें:

use HTML::Entities; 

my $html = "Snoopy & Charlie Brown"; 

print decode_entities($html), "\n"; 

आप उत्पादन अनुमान लगा सकते हैं। &"> और इतने पर - -

+1

उन लोगों के लिए जो सीएलआई एक लाइनर पसंद करते हैं: 'perl -MHTML :: Entities -le' print decode_entities ("& iquest; '") –

3

पूर्वनिर्धारित HTML निकाय के एक मुट्ठी भर रहे हैं कि आप कर सकते थे कठिन कोड।

हालांकि, numberic संस्थाओं के बड़े मामले - { -, बहुत कठिन होने जा रहा है के रूप में उन मूल्यों Unicode कर रहे हैं, और ASCII के लिए रूपांतरण से मुश्किलअसंभव तक होती जा रही है।

+0

काफी सही, बेवन। यूनिकोड से "सादा ASCII" तक बैक-अनुवाद जैसी कोई चीज़ नहीं है। जोएल ने टेक्स्ट एन्कोडिंग पर एक बहुत अच्छा लेख लिखा, डेहमान इसे पढ़ना चाहिए ... – AmbroseChapel

+1

http://www.joelonsoftware.com/articles/Unicode.html 'सादा पाठ = ascii = अक्षर 8 बिट्स "के बारे में सब कुछ है न केवल गलत, यह निराशाजनक रूप से गलत है, और यदि आप अभी भी इस तरह प्रोग्रामिंग कर रहे हैं, तो आप एक चिकित्सकीय डॉक्टर से ज्यादा बेहतर नहीं हैं जो रोगाणुओं पर विश्वास नहीं करता है। ' – AmbroseChapel

+1

पर्ल: ... कठिन चीजें संभव बनाना – daxim

6

नोट वहाँ हेक्स द्वारा निर्दिष्ट वर्ण भी हैं। वे इस तरह दिखेगा: & # xe9; (é)।

उपयोग एचटीएमएल :: इकाइयों के decode_entities वास्तविक पात्रों में संस्थाओं का अनुवाद करने में। इसे एएससीआईआईआई में बदलने के लिए और अधिक काम की आवश्यकता है। अतीत में कुछ सफलता पर लिप्यन्तरण विकल्प के साथ : मैं iconv (पाठ :: iconv पर्ल इंटरफेस) का उपयोग किया है। लेकिन यदि आप पर सीमित इकाइयों के साथ काम कर रहे हैं, या आपको वास्तव में इसे एएससीआईआई समकक्षों, तक कम करने की आवश्यकता नहीं है, तो आप डीकोड_एन्टिटीज को सीमित करने या कस्टम रूपांतरण मानचित्र प्रदान करने से सीमित हो सकते हैं। एचटीएमएल :: एंटिटीज डॉक देखें।

20

ऊपर जवाब आपको बता कैसे पर्ल स्ट्रिंग में संस्थाओं को डिकोड करने के लिए, लेकिन आप यह भी पूछा ASCII में उन बदलने का तरीका।

यह मानते हुए है कि आप वास्तव में क्या चाहते हैं और आप सभी यूनिकोड वर्ण आप CPAN से Text::Unidecode मॉड्यूल देख सकते हैं वापस ASCII वर्ण के एक मोटे तौर पर इसी तरह के संग्रह में उन सभी विषम पात्रों जैप नहीं करना चाहती:

use Text::Unidecode qw(unidecode); 
use HTML::Entities qw(decode_entities); 

my $source = '北亰'; 
print unidecode(decode_entities($source)); 

# That prints: Bei Jing 
संबंधित मुद्दे