Задать вопрос
@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? Как это сделать?
  • Вопрос задан
  • 82 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
переопредели метод в чем проблема?
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
Это правильное поведение. Спецсимволы должны быть конвертированы.
Используй нормальный href
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽