我正在尝试使用SimpleXML输出格式正确的XHTML文档。 我是这样做的:
$pbDoc = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>'.$myTitle.'</title>
<!-- Other headers -->
</head>
</html>');
创建文档后,我想输出相当可读的代码,所以我使用的是这样的DOM模块:
$dom = new DOMDocument();
$dom->loadXML($pbDoc->asXML());
$dom->formatOutput = true;
echo $dom->saveXML();
现在,有两个奇怪的事情困扰我,我想知道这种行为是否正常以及如果可能的话如何禁用它。
DOCTYPE的存在会导致$pbDoc->asXML()
在打开<head>
标记后立即添加不需要的元标记:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
为什么?
有人可以告诉我可能出错的地方以及如何摆脱这些烦恼吗?
答案 0 :(得分:1)
1。根据我可以搜索和猜测的最佳内容,SimpleXML会自动将该标记生成到HTML中,因为XML以&lt; html&gt;
开头2。您可能想尝试这个(http://pt2.php.net/manual/en/domdocument.loadxml.php#73933):
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadXML($pbDoc->asXML());
$dom->formatOutput = true;
echo $dom->saveXML();
3。对于最后一件事(如何摆脱它),我猜你可以对输出的XML做一个简单的str_replace()。所以你的代码将成为:
<?php
// Define the $pbDoc here
$dom = new DOMDocument();
$dom->loadXML($pbDoc->asXML());
$dom->formatOutput = true;
echo str_replace('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />','',$dom->saveXML());
?>