Как избежать DOM, анализирующего добавляющий HTML doctype, <голову> и <тело> теги?

Те инструменты действительно помогают. линт был большим инструментом для разработчиков C.

, Но одно возражение, что я имею, то, что они - пакетные обработки, которые бегут, Вы записали изрядный объем кода и потенциально генерируете много сообщений.

я думаю, что лучший подход должен встроить такую вещь в Ваш IDE и иметь его, указывают на проблему, в то время как Вы пишете это так, можно исправить его сразу же. Не позволяйте тем проблемам войти в кодовую базу во-первых.

Вот в чем разница между инструментом статического анализа FindBugs для Java и Инспектором IntelliJ. Я значительно предпочитаю последнего.

7
задан ilija veselica 29 June 2012 в 01:27
поделиться

3 ответа

Я действительно ищу такое же решение. Я использовал для этого метод innerHTML, однако

вокруг текстового узла все равно будет добавлен, когда вы выполняете loadHTML. У меня нет способа обойти это без использования другого синтаксического анализатора, или есть какой-то скрытый флаг, чтобы он не делал этого.

Этот код:

<?php

function innerHTML($node){
  $doc = new DOMDocument();
  foreach ($node->childNodes as $child)
    $doc->appendChild($doc->importNode($child, true));

  return $doc->saveHTML();
}

 $string = '
    Some photos<br>
    <span class="naslov_slike">photo_by_ile_IMG_1676-01</span><br />
    <span class="naslov_slike">photo_by_ile_IMG_1699-01</span><br />
    <span class="naslov_slike">photo_by_ile_IMG_1697-01</span><br />
    <span class="naslov_slike">photo_by_ile_IMG_1695-01</span><br />    
    ';

    $dom = new DOMDocument();
    $dom->preserveWhiteSpace = false;
    $dom->loadHTML($string);
    $elements = $dom->getElementsByTagName('span');
    $spans = array();
    foreach($elements as $span) {
        $spans[] = $span;
    }
    foreach($spans as $span) {
        $span->parentNode->removeChild($span);
    }

    echo innerHTML( $dom->documentElement->firstChild );

Будет выводить:

<p>Some photos<br><br><br><br><br></p>

Однако, конечно, это решение делает не сохраняйте разметку на 100% нетронутой, но это близко.

7
ответ дан 6 December 2019 в 15:23
поделиться

Вы всегда можете просто использовать регулярное выражение для удаления этого первого бита:

echo preg_replace("/<!DOCTYPE [^>]+>/", "", $dom->saveHTML());
1
ответ дан 6 December 2019 в 15:23
поделиться

I ' я не уверен, что что-то из этого действительно сработает, но вы можете попробовать использовать DOMImplementation :: createDocument при построении своего DOMDocument - третий аргумент - это DOCTYPE , который вы хотите использовать.

Кроме того, вместо saveHTML () вы можете попробовать saveXML ()

-2
ответ дан 6 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: