Есть ли способ сделать это? Я хотел бы заменить один элемент другим, но каким-то образом это невозможно в PHP. Есть следующий код ($ содержание является действительным html5 в моем реальном коде, но снял некоторые вещи, чтобы сделать код короче.):Манипулировать HTML dom в PHP
$content='<!DOCTYPE html>
<content></content>
</html>';
$with='<img class="fullsize" src="/slide-01.jpg" />';
function replaceCustom($content,$with) {
@$document = DOMDocument::loadHTML($content);
$source = $document->getElementsByTagName("content")->item(0);
if(!$source){
return $content;
}
$fragment = $document->createDocumentFragment();
$document->validate();
$fragment->appendXML($with);
$source->parentNode->replaceChild($fragment, $source);
$document->formatOutput = TRUE;
$content = $document->saveHTML();
return $content;
}
echo replaceCustom($content,$with);
Если я заменить <img class="fullsize" src="/slide-01.jpg" />
с <img class="fullsize" src="/slide-01.jpg">
то тег содержимое заменяется пустая строка. Несмотря на то, что img без закрывающего тега является абсолютно допустимым html, он не будет работать, потому что PHP, похоже, поддерживает xml. Весь пример кода, который я видел, использует appendXML для создания documentFragment из строки, но нет эквивалента HTML.
Есть ли способ сделать это, чтобы он не провалился с допустимым HTML, но недействительным XML?
Не замените замену строки или регулярное выражение? – Jonathon
Ваш код, похоже, работает на меня. Я не уверен, в чем проблема. –
Какую версию PHP вы используете? – Spudley