ImpAnonym
@ImpAnonym

Почему htmlspecialchars не работает в контексте DOM?

Мне необходимо вставить в "тег" надпись, где содержатся двойные кавычки ", однако ничего не меняется. Если просто вывести на экран строку и открыть исходный код страницы, то появляются &qout;, а в XML-теги не вставляется в таком виде.
$testTag = $testXML->createElement('test-tag', htmlspecialchars($testString, ENT_XML1 | ENT_QUOTES));

Пробовал и без флагов, и заранее определять переменную и туда всё пихать, а потом вызывать её в createElement. Но вставляется всё равно с кавычками.

Код:
<?php
$testString = 'проверка "тест"';
$testXML = new DOMDocument('1.0', 'utf-8');
$testXML->formatOutput = true;
$testXML->preserveWhiteSpace = false;

$testTag = $testXML->createElement('test-tag', htmlspecialchars($testString, ENT_XML1 | ENT_QUOTES));
$testXML->appendChild($testTag);
// МНОГО ДРУГИХ ВСТАВОК ТЕГОВ
$testXML->save('test.xml');


В XML должно быть проверка &quot;тест&quot;

В общем-то помогло двойное использование htmlspecialchars(). Исходный код:
<?php
$testString = 'проверка "тест"';
$tshsc = htmlspecialchars($testString, ENT_XML1 | ENT_QUOTES);
$testXML = new DOMDocument('1.0', 'utf-8');
$testXML->formatOutput = true;
$testXML->preserveWhiteSpace = false;

$testTag = $testXML->createElement('test-tag', htmlspecialchars($tshsc, ENT_XML1 | ENT_QUOTES));
$testXML->appendChild($testTag);
// МНОГО ДРУГИХ ВСТАВОК ТЕГОВ
$testXML->save('test.xml');


Я ОШИБСЯ! Это не помогло. PHP преобразовывает & в &amp; и всё ломает. Как отключить это преобразование я не нашёл!

То есть в итоге приходит чушь типа проверка &amp;quot;тест&amp;quot;
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fragster
@Fragster
помогло? отметь решением!
Для получения строки используй DOMDocument::saveHTML а не DOMDocument::saveXML. А htmlspecialchars там не нужен.
Ответ написан
@galaxy
А что нужно получить? И что не получается?
Ваш код из вопроса (с поправкой $testXML->save('test.xml') -> print $testXML->saveXML()) работает:
<?xml version="1.0" encoding="utf-8"?>
<test-tag>проверка "тест"</test-tag>
Ответ написан
Ваш ответ на вопрос

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

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