使用PHP从数据库创建XML

时间:2011-07-08 21:06:39

标签: php xml

我正在使用下面的代码从数据库中生成非常大的XML文件 代码不是由我写的,由Kirupa提供的Jubba写的

问题是,一切都很好,但大约30'左右'输出XML文件中的符号丢失。例如,输出将是这样的..

<XYZ> 
<ab>123333</ab> 
<resource>http://xxx.com</resource> 
/XYZ> /*  no '<'  */

使用的代码是:
    

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

$host = "localhost"; 
$user = "root"; 
$pass = ""; 
$database = "test"; 

$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host."); 
mysql_select_db($database, $linkID) or die("Could not find database."); 

 $query = "SELECT * FROM blog ORDER BY date DESC"; 
 $resultID = mysql_query($query, $linkID) or die("Data not found."); 

$xml_output = "<?xml version=\"1.0\"?>\n"; 
$xml_output .= "<entries>\n"; 

for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){ 
$row = mysql_fetch_assoc($resultID); 
$xml_output .= "\t<entry>\n"; 
$xml_output .= "\t\t<date>" . $row['date'] . "</date>\n"; 
    // Escaping illegal characters 

$xml_output .= "\t\t<text>" . $row['text'] . "</text>\n"; 
$xml_output .= "\t</entry>\n"; 
} 

$xml_output .= "</entries>"; 

echo $xml_output; 

?>

你能告诉我错误的原因吗?

1 个答案:

答案 0 :(得分:3)

$row['text'] = str_replace("<", "<", $row['text']); 
                                 ^----- should be &lt;

注意指示的字符。你基本上在这里做了一个null-op,产生了无效的XML。

但是,为什么不使用htmlspecialchars()呢?它仅对html(和XML)元字符进行编码(&'"<>