2010-01-20 12 views
19

मैं पर्ल में स्ट्रिंग/ऑब्जेक्ट को HTML एन्कोड करने का एक आसान तरीका ढूंढ रहा हूं। कम अतिरिक्त पैकेज बेहतर इस्तेमाल करते थे।मैं HTML के लिए स्ट्रिंग को कैसे एन्कोड कर सकता हूं?

+2

"HTML एन्कोड" से आपका क्या मतलब है? क्या आप एक उदाहरण इनपुट और वांछित आउटपुट दे सकते हैं? – cjm

+1

आपको कौन से चरित्र सेट/लोकेशंस को संभालना है? – pilcrow

उत्तर

29

HTML::Entities यहां आपका मित्र है।

use HTML::Entities; 
my $encoded = encode_entities("foo & bar & <baz>"); 
4

आपको स्ट्रिंग या ऑब्जेक्ट को एन्कोड करने की आवश्यकता क्या है? यदि यह केवल एक स्ट्रिंग है, तो आपको केवल यूटीएफ -8, और CGI::escape जैसे एन्कोडिंग समस्याओं के बारे में चिंता करनी होगी, शायद आपके लिए यह चाल होगी। यदि यह एक वस्तु है, तो आपको इसे पहले क्रमबद्ध करने की आवश्यकता होगी, जो मुद्दों का एक नया सेट खोलता है, लेकिन आप JSON पर विचार करना चाहेंगे।

पीएस। हालांकि बाद से मैं किसी भी हाल ही प्रलेखन इस पद्धति पर नहीं मिल सकता है (यह वास्तव में CGI::Util से आयात किया गया है और के रूप में "आंतरिक" चिह्नित है), तो आप शायद escapeHTML (का उपयोग करना चाहिए) daxim उसकी टिप्पणी में बताते हैं: http://search.cpan.org/perldoc?CGI#AUTOESCAPING_HTML

+1

फ़ंक्शन को 'escapeHTML' कहा जाता है। उचित डीप्लिंक: http://search.cpan.org/perldoc?CGI#AUTOESCAPING_HTML – daxim

+0

@daxim: 'CGI :: escape' बहुत अधिक मौजूद है; यह वास्तव में सीजीआई :: परिभाषित और सीजीआई उचित में आयात किया गया है। यदि आप स्रोत को देखते हैं तो कार्यान्वयन में कुछ सूक्ष्म मतभेद हैं, जो दस्तावेज़ों में दुख की बात नहीं है। – Ether

+0

ठीक है। मैं वोट पूर्ववत नहीं कर पा रहा हूं क्योंकि यह बहुत पुराना है। – daxim

27

जब यह प्रश्न का उत्तर पहले दिया गया था, HTML::Entities मॉड्यूल था जो ज्यादातर लोग संभवतः इस्तेमाल करते थे। यह शुद्ध पर्ल है और डिफ़ॉल्ट रूप से HTML आरक्षित वर्ण ><'"& और विस्तृत वर्णों से बच जाएगा।

हाल ही में, HTML::Escape दिखाया गया। इसमें एक्सएस और शुद्ध पर्ल दोनों हैं। यदि आप एक्सएस संस्करण का उपयोग कर रहे हैं, तो यह HTML::Entities से लगभग दस गुना तेज है। हालांकि, यह केवल ><'"& से बच निकला है और डिफ़ॉल्ट को बदलने का कोई तरीका नहीं है। यहाँ

Benchmark: timing 10000 iterations of html_entities, html_escape... 
html_entities: 14 wallclock secs (14.09 usr + 0.01 sys = 14.10 CPU) @ 709.22/s (n=10000) 
html_escape: 1 wallclock secs (0.68 usr + 0.00 sys = 0.68 CPU) @ 14705.88/s (n=10000) 

और प्रत्येक पक्ष पर शुद्ध पर्ल संस्करणों के साथ निष्पक्ष लड़ाई है:: यहाँ XS संस्करण के साथ अंतर है

Benchmark: timing 10000 iterations of html_entities, html_escape... 
html_entities: 14 wallclock secs (13.79 usr + 0.01 sys = 13.80 CPU) @ 724.64/s (n=10000) 
html_escape: 7 wallclock secs (7.57 usr + 0.01 sys = 7.58 CPU) @ 1319.26/s (n=10000) 

आप Surveyor::Benchmark::HTMLEntities में इन मील के पत्थरों मिल सकती है। मैं का उपयोग कर how I distribute benchmarks समझाता हूं।

+0

इस तथ्य को देखते हुए कि 'एचटीएमएल :: संस्थाएं' विस्तृत पात्रों की भी तलाश करती हैं, शुद्ध पर्ल लड़ाई शायद वह उचित नहीं हो सकती है। 'एचटीएमएल :: एस्केप' के शुद्ध पर्ल संस्करण में कोड को अपने स्वयं के एल्गोरिदम के तहत शामिल करने के लिए दिलचस्प हो सकता है और फिर से उस लड़ाई को देख सकता है। –