2008-08-26 23 views
9

मैं PHP में एचटीएमएल में हेरफेर करने की अच्छी विधियों की तलाश में हूं। उदाहरण के लिए, वर्तमान में जो समस्या है, वह विकृत HTML से निपट रही है।PHP में डीओएम मैनिपुलेशन

<div>This is some <b>text 

आपने देखा के रूप में, एचटीएमएल समापन टैग याद आ रही है:

मैं इनपुट कि कुछ इस तरह दिखता हो रही है। मैं इस समस्या को हल करने के लिए रेगेक्स या एक्सएमएल पार्सर का उपयोग कर सकता हूं। हालांकि, यह संभावना है कि मुझे भविष्य में अन्य डीओएम हेरफेर करना होगा। मुझे आश्चर्य है कि क्या कोई अच्छी PHP लाइब्रेरी है जो DOM मैनिपुलेशन को संभालती है जैसे कि जावास्क्रिप्ट डीओएम मैनिपुलेशन के साथ कैसे व्यवहार करता है।

+0

मैं इसके साथ कुछ और करने से पहले HTML शोधक के माध्यम से विकृत एचटीएमएल चलाना शामिल है। – TRiG

उत्तर

11

PHP में a PECL extension that gives you access to the features of HTML Tidy है। Tidy एक बहुत शक्तिशाली लाइब्रेरी है जो उस तरह के कोड लेने और बुद्धिमान ढंग से टैग बंद करने में सक्षम होना चाहिए।

मैं आयात से पहले एक वर्गीकृत विज्ञापन प्रणाली द्वारा मुझे भेजे गए विकृत एक्सएमएल और एचटीएमएल को साफ करने के लिए इसका उपयोग करता हूं।

1

डोम में हेरफेर करने के लिए मुझे लगता है कि आप जो खोज रहे हैं वह this है। मैंने वेब से HTML दस्तावेज़ों का विश्लेषण करने के लिए उपयोग किया है और यह मेरे लिए ठीक काम करता है।

6

मुझे PHP सरल HTML डोम अभी तक सबसे उपयोगी और सीधी आगे लाइब्रेरी मिली है। पीईसीएल से बेहतर मैं कहूंगा।

मैं how to use it to scrape myspace artist tour dates पर एक लेख लिखा है (बस एक उदाहरण।) यहाँ php simple html dom parser.

+0

+1 पहले इसे इस्तेमाल किया गया और अब तक बहुत अच्छी तरह से काम करता है – Marcel

+0

लेख से लिंक मर चुका है। – matt

3

डोम पुस्तकालय जो अब अंतर्निहित होता है आसानी से इस समस्या को हल कर सकते हैं के लिए एक लिंक है। भार विधि विधि लोड नहीं होने पर लोड HTML विधि विकृत एक्सएमएल स्वीकार करेगा।

$d = new DOMDocument; 
$d->loadHTML('<div>This is some <b>text'); 
$d->saveHTML(); 

उत्पादन होगा:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html> 
    <body> 
    <div>This is some <b>text</b></div> 
    </body> 
</html> 
+0

मैंने स्ट्रिंग एन्कोडिंग पर थोड़ा और एक दस्तावेज़ खंड निकालने के लिए एक समान उत्तर दर्ज किया [यहां] (http://stackoverflow.com/questions/8500390/fixing-unclosed-html-tags/43212965#43212965) –