Mink XML处理不如预期,添加反斜杠到feed

时间:2014-04-28 09:00:45

标签: php xml behat mink goutte

我正在使用Mink和Goutte webdriver尝试用XML feed替换网站中表单的内容。

我编写了以下方法:

public function replaceField($field)
    {
        $baseText = '<?xml version="1.0" encoding="UTF-8"?>
<RiskAssessmentReply xmlns="http://test.com" >
    <!-- ExternalId of the Order --> 
    <OrderId>TO_REPLACE</OrderId>
    <RiskInfo>
        <Actions>
            <SystemAction>SystemAction</SystemAction>
            <FinalAction>FinalAction</FinalAction>
        </Actions>
        <Score SystemScore="0"/>
    </RiskInfo>
    <!-- One of Accept, Manual_Accept, Reject, Cancel, or Ignore --> 
    <ResponseCode>Accept</ResponseCode>
    <StoreId>TESTSTORE</StoreId>
</RiskAssessmentReply>';

        $textWithOrderId = preg_replace('/TO_REPLACE/', $GLOBALS['ORDER_ID'], $baseText);
        $this->getSession()->getPage()->fillField($field, $textWithOrderId);
    }

其中基本上包含XML提要,然后我用预先订购的订单ID替换它的一部分,并调用与Mink捆绑在一起的函数fillField

问题是它不只是粘贴我提供的文本,而是通过在“符号之前设置反斜杠,以此类似:

以奇怪的方式对其进行格式化
<?xml version=\"1.0\" encoding=\"UTF-8\"?>

因此,当我尝试提交XML Feed时,网站会显示以下错误:

|  Fatal error: Uncaught exception 'ErrorException' with message 'SimpleXMLElement::__construct(): Entity: line 1: parser error : String not started expecting ' or "'

我尝试过使用PHP中的stripslashes方法,但它不起作用,好像我在添加一个订单ID后尝试回显它显示原始XML而没有斜线,所以我猜在使用fillField确实在我的文本中添加反斜杠时,会调用其他函数,但我无法找到它的源代码。

有人知道从"\"的转换是为了避免它吗?

由于

2 个答案:

答案 0 :(得分:2)

确保PHP中的Magic Quotes设置已关闭,尤其是在您要提交的服务器上。从PHP 5.4.0开始删除它们。

Magic Quotes

答案 1 :(得分:1)

确保在接收表单的页面中使用stripcslashes而不是stripslashes。