我有一个关于“&”的问题符号:
我有这种格式的返回网址:
http://localhost/index.php?task=payment_return&id=113&token=750ac376e9ee1f6e87eba80c409005c4
我在PHP函数中将其设置为XML,位于“url-retorno”:
中private function XMLUrlRetorno() {
// $msg = '<url-retorno>' . $this->getData('url_retorno') . '</url-retorno>';
$msg = '<url-retorno>' . str_replace('&', '&', $this->getData('url_retorno')) . '</url-retorno>';
return $msg;
}
好的,但问题是“&amp;”,如果我的网址是用这种格式写的:
http://localhost/index.php?task=payment_return&id=113&token=750ac376e9ee1f6e87eba80c409005c4
或者
http://localhost/index.php?task=payment_return&id=113&token=750ac376e9ee1f6e87eba80c409005c4
我从XML中收到此错误:
error: Unexpected end of file after url-retorno
我尝试过htmlspecialchar,使用str_replace('&amp;',..)并再次出错..
怎么做,如果'url-retorno'没有“&amp;”它有效,但如果有,不是吗?
XML发送:
<?xml version="1.0" encoding="ISO-8859-1"?>
<requisicao-transacao id="c1303587fb566fdec7ae480f5b8d3e04" versao="1.1.0">
<dados-ec>
<numero>0000000000</numero>
<chave>a00000000a0000000000a0000000aa0000a0000000000a0aaa0a0000aa0aa000</chave>
</dados-ec>
<dados-pedido>
<numero>185</numero>
<valor>15</valor>
<moeda>986</moeda>
<data-hora>2011-11-20T13:57:51</data-hora>
<descricao>185 - teste: 1 x $15.00</descricao>
<idioma>PT</idioma>
</dados-pedido>
<forma-pagamento>
<bandeira>visa</bandeira>
<produto>1</produto>
<parcelas>1</parcelas>
</forma-pagamento>
<url-retorno>http://localhost/index.php?task=payment_return&id=185&token=4babfe87206d14cc88220810d44bbb28</url-retorno>
<autorizar>3</autorizar>
<capturar>1</capturar>
</requisicao-transacao>
XML响应:
<?xml version="1.0" encoding="ISO-8859-1"?>
<erro xmlns="http://ecommerce.cbmp.com.br">
<codigo>001</codigo>
<mensagem>XML inválido: 'error: Unexpected end of file after url-retorno'.</mensagem
</erro>
答案 0 :(得分:2)
xml标记不接受某些字符(请阅读此read this link。)
当您使用未转义的字符时,请使用htmlspecialchars
或相反的方法对其进行编码以对其进行转义。
答案 1 :(得分:1)
只需在xml中使用cdata标签
<![CDATA[
Your url with & in it
]]>
这应该在您的代码中看起来像这样,并且完全符合xml。
private function XMLUrlRetorno() {
$msg = '<url-retorno><![CDATA[' . $this->getData('url_retorno') . ']]></url-retorno>';
return $msg;
}