Задать вопрос
@eugene159

DOMDocument::saveHTML меняет href у ссылки. Как исправить?

Есть такой код:
<?php

$content = '<a href="[[~999]]">ссылка</a>';

// Исправляем ошибки кодировки
$content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');

$dom = new DOMDocument;
// ВАЖНО! Добавляем fakeroot (тег div), так как без него иногда может ломаться верстка. Подробнее: https://stackoverflow.com/questions/39479994/php-domdocument-savehtml-breaks-format .
$dom->loadHTML('<div>' . $content . '</div>', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$root = $dom->documentElement;

$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
    $href = $link->getAttribute('href');
    $href = urldecode($href);
    $link->setAttribute('href', $href);
    $link->setAttribute('data-href', $href);
    $test = $dom->saveHTML($link);
    echo $test;
    break;
}

В итоге выводится такое значение:
<a href="%5B%5B~999%5D%5D" data-href="[[~999]]">ссылка</a>

Можно ли сделать так, чтобы href был такой же, как data-href? Как это сделать?
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
переопредели метод в чем проблема?
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
Это правильное поведение. Спецсимволы должны быть конвертированы.
Используй нормальный href
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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