2012-05-04 12 views
5

मुझे HTML डेटा का एक गुच्छा मिला है जिसे मैं PHP का उपयोग करके पीडीएफ फ़ाइल में लिख रहा हूं। पीडीएफ में, मैं चाहता हूं कि सभी एचटीएमएल को छीन लिया जाए और साफ़ किया जाए। तो उदाहरण के लिए:स्वच्छ स्ट्रिंग बनाने के लिए PHP के साथ क्लीनअप एचटीएमएल

<ul> 
    <li>First list item</li> 
    <li>Second list item which is quite a bit longer</li> 
    <li>List item with apostrophe 's 's</li> 
</ul> 

बन चाहिए:

First list item 
Second list item which is quite a bit longer 
List item with apostrophe 's 's 

हालांकि, अगर मैं बस strip_tags() उपयोग करते हैं, मैं कुछ इस तरह मिलती है:

First list item&#8232; 

    Second list item which is quite a bit 
longer&#8232; 

    List item with apostrophe &rsquo;s &rsquo;s 

इसके अलावा उत्पादन का खरोज ध्यान दें।

एचटीएमएल को अच्छी तरह से साफ करने के तरीके के बारे में कोई सुझाव, गंदे सफेद जगहों और अजीब पात्रों के बिना साफ, साफ तारों को कैसे साफ करें?

धन्यवाद :)

+2

मुझे संदेह है कि 'strip_tags()' अकेले आपकी इकाइयों को एन्कोड करेगा। क्या आप वाकई कहीं 'htmlentities' पर कॉल नहीं खो रहे हैं? – Yoshi

+1

इंडेंटिंग बिल्कुल वही है जो मैं उम्मीद करता हूं, PHP टैग को अलग कर रहा है, लेकिन उनके चारों ओर अतिरिक्त पाठ नहीं है। – scragar

+0

क्या आपका मतलब है कि मुझे * चाहिए * * * * कहीं भी htmlentities() का उपयोग नहीं करना चाहिए? इस समय मैं नहीं हूँ। एचटीएमएल डेटा सीधे डेटाबेस से आता है। – Rein

उत्तर

3

आप html_entity_decode का उपयोग कर strip_tags का परिणाम डिकोड या preg_replace का उपयोग कर उन्हें निकाल सकते हैं:

$text = strip_tags($html_text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 

और शुरू से सफेद रिक्त स्थान को दूर करने के अपने लाइनों ltrim का उपयोग करें:

$content = join("\n", array_map("ltrim", explode("\n", $content))); 

एस्ट्रोफ़ेस को इसके बजाय उपयोग करने के लिए:

$text = strip_tags($html_text); 
$text = str_replace("&rsquo;","'", $text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 
+0

यह बढ़िया है! लगभग वहाँ। केवल एक चीज यह है कि apostrophes अब पूरी तरह से चला गया है। क्या इसे मामूली समायोजन के साथ तय किया जा सकता है? – Rein

+0

क्या आपने html_entity_decode या preg_replace का उपयोग किया था? –

+0

मैंने आपके उत्तर में preg_replace का उपयोग किया था। – Rein

0

उपयोग PHP Tidy पुस्तकालय अपने html साफ करने के लिए। लेकिन आपके मामले में मैं HTML से डेटा प्राप्त करने के लिए DOMDocument कक्षा का उपयोग करूंगा।

3

वर्ण एचटीएमएल इकाइयां प्रतीत होते हैं। प्रयास करें:

html_entity_decode(strip_tags($my_html_code)); 
+0

किसी कारण से यह उन्हें नहीं बदलता है ... – Rein

+0

बिल्कुल सही, इसने मेरे साथ कोई समस्या होने के लिए एक इलाज किया। – Railto

संबंधित मुद्दे