PHP: Как начать работать в файле загрузки simplexml() var
Я загружаю xml в php с помощью simplexml_load_file().
Я загружаю файл с этим:
$xml = simplexml_load_file('flash/datas/datas.xml');
И доступ к моему контенту таким образом:
$descText = $xml->aboutModule->chocolaterie->desc
Текст из desc хорошо зарегистрирован в моем $DESCTEXT, но все <br/>
текста исчезают... Так что мой длинный текст в одной строке, не очень хороший:-/
Вы знаете, как это решить? Есть ли какая-то особая черта для выполнения одного из $xml
var? Или что-то еще?
Заранее благодарю вас за вашу помощь!
4 answers
Два способа заставить это работать.
Правильный
Не не храните эти <br/>
. Храните реальные фактические новые строки, например
<desc>
Line 1.
Line 2.
</desc>
Затем используйте nl2br() для замены новых строк тегами HTML. Это предполагает, что ваше описание обычно не содержит разметки. Если это так, используйте разделы CDATA, как предложено в другом ответе.
другой один
$descText = strip_tags($xml->aboutModule->chocolaterie->desc->asXML(), '<br /><br/>');
Взгляните на это.
Есть способ вернуть HTML-теги. Например:
<?xml version="1.0"?>
<intro>
Welcome to <b>Example.com</b>!
</intro>
Это PHP-код:
<?php
// I use @ so that it doesn't spit out content of my XML in an
// error message if the load fails. The content could be
// passwords so this is just to be safe.
$xml = @simplexml_load_file('content_intro.xml');
if ($xml) {
// asXML() will keep the HTML tags but it will also keep the parent tag <intro> so I strip them out with a str_replace. You could obviously also use a preg_replace if you have lots of tags.
$intro = str_replace(array('<intro>', '</intro>'), '', $xml->asXML());
} else {
$error = "Could not load intro XML file.";
}
?>
Если у вас есть контроль над исходным XML, возможно, вам будет лучше хранить описание в виде символьных данных, т.Е. в оболочке CDATA, а не смешивать ваш XML с HTML.
Например, вместо:
...
<desc>
This is a description<br /> with a break in it
</desc>
...
...сделайте что-нибудь вроде:
...
<desc>
<![CDATA[
This is a description<br /> with a break in it
]]>
</desc>
Но если вы этого не сделали, то, как говорит Casidiablo, вам придется захватить содержимое элемента <desc>
в формате XML.
Лучше вы можете использовать следующий код для замены тегов BR на новые символы строки.
preg_replace("/(\s*)+/", "\n", $input);
ИЛИ
Вы можете преобразовать содержимое описания в "htmlentities", а затем вернуться к "htmlspecialchars"