2015-02-23 51 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(); 
相关问题