[英]Add HTML Codes to XML file using PHP
我有一個xml文件(scores.xml),它使用php代碼向其中添加新標簽...
我有一個名為Header的標簽,其中包含一些html代碼
<![CDATA[<tr><td colspan='7' id='headertd'>
<img border='0' src='images/euro.png' />
UEFA Euro 2012 Qualifications</td></tr>]]>
當我以pgp腳本的形式編寫此代碼並提交所有內容到XML文件時,除了標頭標記外……正常。我在php腳本中遇到錯誤,並且代碼進入xml標記中,如下所示:
<![CDATA[<tr><td colspan='7' id='headertd'>
<img border='0' src='images/euro.png' />
UEFA Euro 2012 Qualifications</td></tr>]]>
所以多數民眾贊成在獲取信息到我的xml ...反正我可以解決這個問題嗎? 並避免這些代碼的轉換?
多數民眾贊成在我的PHP代碼:
<?php
if (isset($_POST['submitted'])) {//If the user submitted the form, then add to the XML file
//Load the scores XML file
$scores = new DOMDocument();
$scores -> load('../scores.xml');
//Get the <Games> tag
$games = $scores -> getElementsByTagName('Games');
//Create the new <Game> tag (Could probably be done better by first placing everything in an array or something)
$newGame = $scores -> createElement("Game");
$newGame -> appendChild($scores -> createElement("Header", $_POST['header']));
$newGame -> appendChild($scores -> createElement("Row", $_POST['row']));
$newGame -> appendChild($scores -> createElement("Date", $_POST['date']));
$newGame -> appendChild($scores -> createElement("Time", $_POST['time']));
$newGame -> appendChild($scores -> createElement("HomeTeam", $_POST['hometeam']));
$newGame -> appendChild($scores -> createElement("Score", $_POST['score']));
$newGame -> appendChild($scores -> createElement("AwayTeam", $_POST['awayteam']));
$newGame -> appendChild($scores -> createElement("Other", $_POST['other']));
$newGame -> appendChild($scores -> createElement("InfoID", $_POST['infoid']));
$newGame -> appendChild($scores -> createElement("InfoData", $_POST['infodata']));
//Add the new <Game> tag under the <Games> tag
$games -> item(0) -> appendChild($newGame);
//Save again
$scores -> save('../scores.xml');
echo "New game added.";
}
?>
和這個PHP連接到一個看起來像這樣的形式:
<form id="form1" method="post" action="">
<table id="table2">
<tr><td>Header:</td> <td><textarea style=" color:#000;" name="header" cols="73" rows="6" > </textarea></td></tr>
<tr><td>Row:</td> <td><input id='textfield' type="text" size="70" name="row" value='A or B' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td></tr>
<tr><td>Date:</td> <td><input id='textfield' type="text" size="70" name="date" value='Date and time of the match' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td></tr>
<tr><td>Time:</td> <td><input id='textfield' type="text" size="70" name="time" value='Current time' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td></tr>
<tr><td>HomeTeam:</td> <td><input id='textfield' type="text" size="70" name="hometeam" value='Home Team' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td></tr>
<tr><td>Score:</td> <td><input id='textfield' type="text" size="70" name="score" value='Score' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td><td>"3 - 2"</td></tr>
<tr><td>AwayTeam:</td> <td><input id='textfield' type="text" size="70" name="awayteam" value='Away Team' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td></tr>
<tr><td>Other:</td> <td><input id='textfield' type="text" size="70" name="other" value='Additional Info' onfocus="inputFocus(this)" onblur="inputBlur(this)"></td></tr>
<tr><td>InfoID:</td> <td><input id='textfield' type="text" size="70" name="infoid" value='The ID of the Popup' onfocus="inputFocus(this)" onblur="inputBlur(this)" ></td><td></td></tr>
<tr><td>InfoData:</td> <td><textarea id='textfield' value='Data of the Popup' onfocus="inputFocus(this)" onblur="inputBlur(this)" name="infodata" cols="73" rows="6"></textarea></td><td>
<tr><td> </td><td><input type="submit" name="submitted" name="Add new row"></td><td> <td></td>
</table>
<style>
BODY {font-family:"Trebuchet MS", Arial, Helvetica, sans-serif; color:#333; font-size:11px;}
#textfield {color:#888;}
#table2 td, tr { padding-right:10px;}
</style>
您可以使用PHP函數createCDATASection將CDATA添加到xml文件中:
交換
$newGame -> appendChild($scores -> createElement("Header", $_POST['header']));
對於
$h = $scores -> createElement("Header"); //Create a empty <Header> tag
$h -> appendChild($scores ->createCDATASection ($_POST['header'])); //Add a CDATA element to it
$newGame -> appendChild($h); //Then append it to the game tag
有了評論,它應該很簡單。
我認為您不應該使用CDATA。 有很多問題。 通過省略它,我相信一切都會按預期進行。
您現在所擁有的實際上是雙重編碼(使用CDATA和添加的實體),因此在這種情況下,結果將是錯誤的。
表單背后的代碼可能使用以下方式保存表單值:
htmlentities($xml_string);
如果您使用框架來處理表單提交,則可能傳遞一個標志(真/假),以告訴框架在保存數據時不要使用htmlentities。 但是,請確保您仍在以某種方式驗證字段,以防止注入安全漏洞。 (例如-如果存儲在數據庫中,請使用mysql_real_escape_string()或類似名稱。)
您可以嘗試:
$scores = new DOMDocument();
$scores->substituteEntities = false;
$scores->load('../scores.xml');
我只是讓它看起來像xml文件中的樣子,當您檢索它時,可以使用PHP函數htmlspecialchars_decode
將它們轉換回去。
例:
<?php
$s = "<tr><td colspan='7' id='headertd'>

<img border='0' src='images/euro.png' />

UEFA Euro 2012 Qualifications</td></tr>";
//The orginal $s is retrieved from the XML file
$s = htmlspecialchars_decode($s);
echo $s; //The orginal code is printed
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.