PHP和DOMDocument - loadHTML使文本在<之后消失。标志

时间:2014-03-04 08:34:43

标签: php html xml domdocument

我在字符串中有这个html:

$html = '<obj><p>Figure 1. different (<italic>p</italic>< 0.05).</p></obj>';

然后,我在domDocument中加载它:

$doc  = new DOMDocument("1.0","UTF-8");
@$doc->loadHTML($html);

然后,当我转储domDocument的内容时:

var_dump($doc->saveHTML());

我得到了:

<html><body><obj><p>Figure 1. different (<italic>p</italic></p></obj></body></html>

所以签署&lt;其余的都消失了。

知道为什么吗?

谢谢。

3 个答案:

答案 0 :(得分:1)

解析器认为您正在打开一个新的HTML标记。请尝试使用&lt;

$html = '<obj><p>Figure 1. different (<italic>p</italic>&lt; 0.05).</p></obj>';

答案 1 :(得分:1)

嗯,html标记使用了<,因此你发布的html字符串被浏览器解释为html。

如果要显示 literal html标记,则必须将其转义或以明确方式将其标记为预先格式化的文本:

echo "<pre>\n";
var_dump($doc->saveHTML());
echo </pre\n";

如果你想要解释html标记,但只是对单个字符进行了转义,你必须以明确的方式做到这一点,以便浏览器可以区分:

$html = '<obj><p>Figure 1. different (<italic>p</italic>&lt; 0.05).</p></obj>';
var_dump($html);

答案 2 :(得分:1)

这将打印为xml

header("Content-type: text/xml; charset=utf-8");
$html = '<obj><p>Figure 1. different (<italic>p</italic>'.    htmlspecialchars('< 0.05).') .'</p></obj>';

// Or else if you need this, then uncomment below line

//$html = htmlspecialchars('<obj><p>Figure 1. different (<italic>p</italic>< 0.05).</p></obj>');
$doc  = new DOMDocument("1.0","UTF-8");
@$doc->loadHTML($html);
echo ($doc->saveHTML());