我正在使用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
确实在我的文本中添加反斜杠时,会调用其他函数,但我无法找到它的源代码。
有人知道从"
到\"
的转换是为了避免它吗?
由于
答案 0 :(得分:2)
确保PHP中的Magic Quotes设置已关闭,尤其是在您要提交的服务器上。从PHP 5.4.0开始删除它们。
答案 1 :(得分:1)
确保在接收表单的页面中使用stripcslashes而不是stripslashes。