繁体   English   中英

PHP:如何在simplexml_load_file()var中工作

[英]PHP: How to get <br/> working in a simplexml_load_file() var

我通过simplexml_load_file()在php中加载一个xml。

我加载文件:

$xml = simplexml_load_file('flash/datas/datas.xml');

并访问我的内容:

$descText = $xml->aboutModule->chocolaterie->desc

从说明文字是我在$ descText以及registred,但所有的<br/>文字的消失......所以我的长文本是单行线,不那么好: - /

你知道怎么解决这个问题吗? 是否有一个特殊的traitement做一个$xml var? 或其他什么?

预先感谢您的帮助!

两种方法使它工作。

正确的那一个

不要存放那些<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”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM