基本上,我试图使用示例代码将Google订单处理(级别2集成)添加到CakePHP应用程序中。
我可以成功地创建手推车并接收从Google发送到我的应用程序的通知,但是它不能正确地承认这些。
在google代码中,执行这个回显的函数如下:
<?xml version="1.0" encoding="UTF-8" ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number="119963104284921-00001-7" />不过,收到的代码如下:
<?xml version=1.0 encoding=UTF-8 ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number=119963104284921-00001-7 />我不知道是什么导致了这一点,我认为这与Cake没有任何关系,我已经禁用了PHP短标签,所以我可以使用内联XML,但这并没有什么区别。
如果我从字符串中删除了第一个<,那么echo函数的其余代码都是正确的,把它留在里面,它就会刹车(很明显,这也适用于?和关闭>符号,我只是不能同时拥有所有这些代码!)
我已经能够复制这一点,试图删除在谷歌代码中使用下面的功能正在做的任何看不见的东西。它做完全相同的事情,但包含在一个(蛋糕)控制器和硬编码变量。
public function blank($tags = null) {
$schema = 'http://checkout.google.com/schema/2';
$serial = '119963104284921-00001-7';
if ($tags != null) {
$acknowledgment = '<?xml version="1.0" encoding="UTF-8" ?'.'>'.'<notification-acknowledgment xmlns="'.$schema.' '.'serial-number="'.$serial.'" />';
} else {
$acknowledgment = '?xml version="1.0" encoding="UTF-8" ?>'.'<notification-acknowledgment xmlns="'.$schema.' '.'serial-number="'.$serial.'" />';
}
$this->set('_ack', $acknowledgment);
}IF语句用于显示<符号所产生的差异。
不使用任何内容调用它($tags == null)将提供以下输出:
<?xml version="1.0" encoding="UTF-8" ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number="119963104284921-00001-7" />来源。
使用任何其他值($tags != null)调用它将提供以下输出:
<?xml version=1.0 encoding=UTF-8 ?><notification-acknowledgment xmlns="http://checkout.google.com/schema/2" serial-number=119963104284921-00001-7 />来源。
我的问题(终于!)为什么会发生这种事?如何让它正确地输出XML?
对不起,如果我错过了一些非常明显的事情,但我宁愿让它在这里指出,也不愿在今后的一天里无所事事!
发布于 2012-01-30 15:33:21
这个“问题”与PHP解释器有关。
有解决办法,但一切都在看,而不是在被控制的人。
//var
$questionmark = "?";
echo "<".$questionmark."xml version=\"1.0\" encoding=\"utf-8\"".$questionmark.">";
// separate
echo '<' . '?xml version="1.0" encoding="utf-8"?' . '>';发布于 2012-01-30 19:32:10
一些XML解析器不允许用大写字母指定编码(例如,UTF-8不正确)。
尝试将编码更改为"utf-8“,以查看是否修复了它。
https://stackoverflow.com/questions/9065544
复制相似问题