मैं उपयोगकर्ताओं द्वारा डाले गए एचटीएमएल के असमर्थित टैग को हटाना चाहता हूं (सिस्टम परिभाषित करता है कि कौन सा टैग समर्थित है), उदाहरण प्रणाली केवल "div" टैग समर्थित है:

<div><span>Hello</span> <span>World</span></div>

में परिवर्तित हो जाएगा:

<div>Hello World</div>

सरल HTML डोम के साथ यह मेरा कोड है:

function main()
{
    $content = '<div><span>Hello</span> <span>World</span></div>';

    $html = str_get_html($content);

    $html = htmlParser($html);
}

function htmlParser($html)
{
    $supportedTags = ['div'];

    foreach ($html->childNodes() as $node) {
        // Remove unsupported tags
        if (!in_array($node->tag, $supportedTags)) {
            $node->parent()->innertext = str_replace($node->outertext, $node->innertext, $node->parent()->innertext);
            $node->outertext = '';
        }

        if ($node->childNodes()) {
            htmlParser($node);
        }
    }

    return $html;
}

लेकिन अगर कई नेस्टेड असमर्थित टैग होते हैं, तो बात गलत हो जाती है, जैसे:

<div><span>Hello</span> <span>World</span> <span><b>!!</b></span></div>

इसे में बदल दिया जाएगा

<div>Hello World <b>!!</b></div>

लेकिन अपेक्षित परिणाम है

<div>Hello World !!</div>

उपाय क्या है? क्या मुझे साधारण HTML DOM का उपयोग जारी रखना चाहिए या इस समस्या को हल करने का कोई अन्य तरीका खोजना चाहिए?

उन्नत में मेरी समस्या को हल करने के लिए धन्यवाद।

0
Momo 30 अगस्त 2018, 06:39

2 जवाब

सबसे बढ़िया उत्तर

कुछ संघर्षों के बाद, मुझे पता चला कि मुझे $node->parent() संपादित नहीं करना चाहिए क्योंकि यह एक लूप में है और पहले चाइल्डनोड्स को लोड करना चाहिए। कोड इस तरह होना चाहिए:

function htmlParser($html)
{
    $supportedTags = ['div'];

    foreach ($html->childNodes() as $node) {
        if ($node->childNodes()) {
            htmlParser($node);
        }

        // Remove unsupported tags
        if (!in_array($node->tag, $supportedTags)) {
            $node->outertext = $node->innertext;
        }
    }

    return $html;
}
0
Momo 30 अगस्त 2018, 10:41

आप इसे उतना ही कर सकते हैं जितना मैं समझता हूं। strip_tags($html, '<div><b>');

उदाहरण : https://3v4l.org/p4nLV


संदर्भ : http://php.net/strip_tags

0
Özgür Can Karagöz 30 अगस्त 2018, 06:51