2009-07-23 20 views
6

मैं सिर्फ अगर किसी भी एक एक समारोह जानता था php में एक स्ट्रिंग से सभी वर्गों को दूर करने के सोच रहा था असल में मैं केवल चाहतेपट्टी पी टैग से सभी वर्गों ..

<p> 

टैग के बजाय

<p class="..."> 

उस अर्थ :)

उत्तर

8

एक काफी अनुभवहीन regex शायद के लिए काम करेगा बनाता है, तो आप

$html=preg_replace('/class=".*?"/', '', $html); 

मैं बेवकूफ कहता हूं क्योंकि अगर आपके शरीर के पाठ में कुछ कारणों से वर्ग = "कुछ" होता है तो यह असफल हो जाएगा! इसे आवश्यक होने पर एंग्लेड ब्रैकेट किए गए टैग के अंदर वर्ग = "" की तलाश करके थोड़ा और मजबूत बनाया जा सकता है।

+0

बहुत बहुत धन्यवाद, एक आकर्षण की तरह काम करता है :) – SoulieBaby

+0

क्या कोड ऊपरी/निचले मामले, एकल/डबल/कोई उद्धरण, कक्षाओं के पहले और बाद में रिक्त स्थान के साथ काम करता है? –

+0

नहीं - केवल ओपी द्वारा संकेतित मामलों। पाठक के लिए अभ्यास के रूप में कुछ और छोड़ दिया गया है :) –

1

मैं jQuery पर ऐसा कुछ करूंगा। इसे अपने पेज हेडर में रखें:

$(document).ready(function(){ 
$(p).each(function(){ 
    $(this).removeAttr("class"); 
    //or $(this).removeclass("className"); 
}) 

});

+0

PHP नहीं, लेकिन एक बेहतर समाधान – Draemon

+2

यह सुनिश्चित नहीं है कि ओपी यह क्यों जान सकता है कि ओपी ऐसा क्यों करना चाहता था। –

+0

बेहतर नहीं है, इसे करने का दूसरा तरीका :) – Teknotica

2

शायद यह अपनी जरूरत के लिए एक सा overkill है, लेकिन, पार्स/मान्य/साफ एचटीएमएल डेटा के लिए, सबसे अच्छा उपकरण मैं जानता हूँ कि HTML Purifier

यह आप कौन से टैग निर्धारित कर सकते हैं, और जो गुण ठीक कर रहे हैं,; और/या कौन सा नहीं हैं; और यह आउटपुट के रूप में वैध/साफ (एक्स) एचटीएमएल देता है।

+0

अगर मैं गलत हूं, तो मुझे सही करें, लेकिन लेक्सिकल विश्लेषकों को सच नहीं है एक्सएमएल पार्सर्स एक्सएमएल को रेगेक्स के साथ अलग करते हैं? मुझे लगता है कि असली मुद्दा यह है कि जब लोग खुद को रेगेक्स पार्सर्स करने का प्रयास करते हैं तो वे स्ट्रिंग की शुरुआत में शुरू करने की बजाय स्ट्रिंग के मध्य या अंत तक कूदने की कोशिश करते हैं जैसे कि एक वास्तविक पार्सर करता है। – joebert

+1

मुझे नहीं लगता कि वे करते हैं - इसके बारे में निश्चित नहीं है, लेकिन ... अजीब लगता है। वैसे भी, भले ही वे करते हैं, वे शायद अधिक परीक्षण (क्योंकि वे व्यापक रूप से उपयोग किए जाते हैं) रेगेक्स की तुलना में आप स्वयं को अपनी परियोजना के लिए लिखेंगे। –

2

आप HTML लोड (regexes का उपयोग करना "पार्स" करने के लिए HTML शुरुआत में ठीक लगता है ... और फिर, जब आप विशिष्ट सामान जोड़ना चाहते हैं, यह आम तौर पर नरक को समझने के लिए/बनाए रखने के हो जाता है) एक DOMDocument क्लास में, इसे सरलXML में लोड करें। फिर आप सभी पी तत्वों के लिए एक XPath क्वेरी करते हैं और फिर उनके माध्यम से लूप करते हैं। प्रत्येक पाश पर, आप क्लास एट्रिब्यूट को "killmeplease" जैसी चीज़ों का नाम बदलते हैं।

जब ऐसा हो जाता है, तो सरल एक्सएमएल को एक्सएमएल के रूप में दोबारा दबाएं (जो, वैसे, एचटीएमएल बदल सकता है, लेकिन आमतौर पर केवल बेहतर के लिए), और आपके पास एक HTML स्ट्रिंग होगी जहां प्रत्येक पी में "killmeplease" । वास्तव में उन्हें हटाने के लिए str_replace का उपयोग करें।

उदाहरण:

$html_file = "somehtmlfile.html"; 

$dom = new DOMDocument(); 
$dom->loadHTMLFile($html_file); 

$xml = simplexml_import_dom($dom); 

$paragraphs = $xml->xpath("//p"); 

foreach($paragraphs as $paragraph) { 
    $paragraph['class'] = "killmeplease"; 
} 

$new_html = $xml->asXML(); 

$better_html = str_replace('class="killmeplease"', "", $new_html); 

या, आप कोड अधिक सरल लेकिन preg_replace साथ उलझन करना चाहते हैं, आप के साथ जा सकते हैं:

$html_file = "somehtmlfile.html"; 
$html_string = file_get_contents($html_file); 

$bad_p_class = "/(<p).*(class=.*)(\s.*>)/"; 

$better_html = preg_replace($bad_p_class, '$1 $3', $html_string); 

मुश्किल हिस्सा नियमित अभिव्यक्ति के साथ वे करते है लालची होने और इसे बंद करने की कोशिश करने से समस्याएं पैदा हो सकती हैं यदि आपके पी तत्व टैग में एक लाइन ब्रेक है। लेकिन उनमें से किसी एक शॉट को दें।

1

एचटीएमएल शोधक

एचटीएमएल बहुत क्योंकि अलग अलग तरीकों से कोड या लिखा जा सकता है स्वरूपित के सैकड़ों regex के लिए मुश्किल हो सकता है।

HTML purifier एचटीएमएल की सफाई के लिए एक परिपक्व ओपन सोर्स लाइब्रेरी है। मैं इस मामले में इसके उपयोग की सलाह दूंगा।

एचटीएमएल शोधक के कॉन्फ़िगरेशन प्रलेखन में, आप कक्षाओं और विशेषताओं को निर्दिष्ट कर सकते हैं जिन्हें अनुमति दी जानी चाहिए और शोधकर्ता को उन्हें क्या मिलना चाहिए।

http://htmlpurifier.org/docs/

2
$html = "<p id='fine' class='r3e1 b4d 1' style='widows: inherit;'>";  
preg_replace('/\sclass=[\'|"][^\'"]+[\'|"]/', '', $html); 

आप Microsoft Office निर्यात एचटीएमएल के खिलाफ परीक्षण आप वर्ग को हटाने लेकिन HTML Tidy की तुलना में अधिक की आवश्यकता होगी करने के लिए रखा जा रहा है सिर्फ माइक्रोसॉफ्ट ऑफिस के लिए एक config flag है!

अन्यथा, यह कुछ अन्य उत्तरों की तुलना में सुरक्षित होना चाहिए क्योंकि वे थोड़ा लालची हैं और आप नहीं जानते कि किस तरह के encapsulation का उपयोग किया जाएगा (' या ")।

नोट: पैटर्न वास्तव में /\sclass=['|"][^'"]+['|"]/ है, लेकिन, के रूप में वहाँ दोनों औंधा अल्पविराम के हैं (") अक्षर लोप ('), मैं पैटर्न को संपुटित करने के लिए एक (\') की सभी घटनाओं से बचने के लिए किया था।

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