@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? Как это сделать?
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
переопредели метод в чем проблема?
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
Это правильное поведение. Спецсимволы должны быть конвертированы.
Используй нормальный href
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы