Трудности вывести «HTML-код строки» через XML - PullRequest
1 голос
/ 06 октября 2010

У меня возникли трудности с выводом «кода HTML-строки» через XML. Я привел пример ниже. На стороне сервера у меня есть код, написанный на PHP.

$htmlCode = "<div>...........................</div>";

header("Content-type: text/xml");

echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<info>";
echo "<htmlCode>";
echo $htmlCode;
echo "</htmlCode>";
echo "</info>";

Проблема заключается в том, что «строковый код HTML» или $ htmlCode выше имеет элементы тегов, поэтому «строковые коды HTML» будут обрабатываться как код XML. И я хочу, чтобы вывод обрабатывался как строка.

А на стороне клиента у меня есть "AJAX-вызов", чтобы получить строку HTML-кода.

document.getElementById('someID').innerHTML=xmlhttp.responseXML.getElementsByTagName("htmlCode")[0].childNodes[0].nodeValue;//I got nothing because the string is treated as XML code.

Как мне решить эту проблему? Надеюсь, я был достаточно конкретен, чтобы вы поняли мою проблему.

Ответы [ 3 ]

5 голосов
/ 06 октября 2010

Вы ищете CDATA.

Термин CDATA используется для текстовых данных, которые не должны анализироваться анализатором XML.

Все внутри раздела CDATA игнорируется синтаксическим анализатором.

Раздел CDATA начинается с <![CDATA[ и заканчивается ]]>:

// escape closing tags
$htmlCode = str_replace("]]>", "<![CDATA[]]]]><![CDATA[>]]>", $htmlCode);

echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<info>";
echo "<htmlCode>";
echo "<![CDATA[".$htmlCode."]]>";
echo "</htmlCode>";
echo "</info>";

Добавлено исправление выхода из здесь

3 голосов
/ 06 октября 2010

Не собирайте XML из строк. Просто не надо. Есть готовые к использованию библиотеки, которые делают правильные вещи. Реализация PHP в DOM является одним из них.

$myHtmlString = "<div>Some HTML</div>";

$xml  = new DOMDocument('1.0', 'utf-8');

$info = $xml->createElement('info');
$xml->appendChild($info);

$htmlCode = $xml->createElement('htmlCode', $myHtmlString);
$info->appendChild($htmlCode);

echo $xml->saveXML();

Это кажется более сложным подходом, но на самом деле это гарантирует, что ваш XML правильный. Напротив, простое объединение нескольких строк приведет к ошибке .

1 голос
/ 06 октября 2010

Используйте htmlspecialchars(). Хотя эта функция названа в честь HTML, она также вполне приемлема для XML. (htmlentities() не будет, но вы почти никогда не захотите его использовать.)

<?php
    $htmlCode = "<div>...........................</div>";

    header("Content-type: text/xml");
    echo '<?xml encoding="ISO-8859-1"?>'; // really? sure?
?>
<info>
    <htmlCode><?php echo htmlspecialchars($htmlCode); ?></htmlCode>
</info>

Использование CDATASection также нормально, но, учитывая, что вам нужно избегать последовательности ]]>, в этом случае действительно нет особых преимуществ по сравнению с XML-кодированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...