2015-02-23 141 views
1

我已經使用SimpleXMLElement創建了xml,但它無法處理&。這裏是我的代碼如何在SimpleXML中處理&和其他特殊字符PHP

$contacts = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Contacts></Contacts>'); 
$name = $contacts->addChild('name', 'You & Me'); 
$name->addAttribute('no', '1'); 
echo $contacts->asXML(); 

這裏是輸出

<?xml version="1.0" encoding="UTF-8"?> 
<Contacts><name no="1">You </name></Contacts> 

如何解決這個問題。我想爲所有特殊字符提供解決方案。

回答

0

這應該爲你工作,而無需使用HTML代碼,因爲這樣它會自動轉義它:

(因爲addChild()只能轉義<>,但不&

$contacts = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Contacts></Contacts>'); 
$contacts->name[0] = 'You & Me'; 
$contacts->name[0]->addAttribute('no', '1'); 
echo $contacts->asXML(); 

輸出(源代碼):

<?xml version="1.0" encoding="UTF-8"?> 
<Contacts><name no="1">You &amp; Me</name></Contacts> 
+0

如果我有一個以上的孩子有相同的名字,然後該怎麼辦? – 2015-02-23 08:29:30

+1

@ Md.Yusuf然後確保像這樣指定它:'$ contacts-> name [2] ='你& Me';'如果你不知道數字,只想追加一個do:'$ contacts-> name [] ='你& Me';' – Rizier123 2015-02-23 08:49:05

+0

@ Md.Yusuf BTW:如果你想要一個完整的解釋爲什麼這樣處理這樣看到這個:http://stackoverflow.com/q/552957/3933332 – Rizier123 2015-02-23 08:52:07

0

您有例如HTML代碼http://www.ascii.cl/htmlcodes.htm來取代它或查看http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

$contacts = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Contacts></Contacts>'); 
$name = $contacts->addChild('name', 'You &amp; Me'); 
$name->addAttribute('no', '1'); 
echo $contacts->asXML(); 

你也可以使用函數用htmlspecialchars做

$contacts = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Contacts></Contacts>'); 
$name = $contacts->addChild('name', htmlspecialchars('You & Me', ENT_QUOTES, "utf-8")); 
$name->addAttribute('no', '1'); 
echo $contacts->asXML();