我收到了来自PayPal的NPV形式的回复,所以我使用explode("&",$response)
来分隔返回值,但我担心将来如果他们混合他们的字符串(比如用ACK而不是TOKEN开始) ),我的代码将返回错误的值。
我的完整代码:
list($token,$timestamp,$correlation,$ack,$version,$build) = explode("&",$response);
字符串如下所示:TOKEN=EC-3RC2692512364446&TIMESTAMP=2014-02-07T00:52:51Z&CORRELATIONID=e8467b1c30fb7&ACK=Success&VERSION=109.0&BUILD=9605603
有关更好地获取此字符串中每个“字符串”值的任何建议吗?我在想strstr
甚至strpos
,但我不确定。提前感谢您的任何帮助!
答案 0 :(得分:1)
$results = array();
foreach (explode("&", $response) as $entry) {
list ($key, $val) = explode('=', $entry);
$results[strtolower($key)] = $val;
}
现在您可以访问$results['token']
,例如。
您还可以使用parse_str()
来解析看起来像URL查询字符串的数据。如果他们使用百分比编码对特殊字符进行编码,那么这将为您处理。
答案 1 :(得分:1)
您可以考虑使用variable variables:
foreach(explode("&", $response) as $val){
$exp = explode("=", $val, 2);
${strtolower($exp[0])} = $exp[1];
}
然后您可以检查变量是否已实际创建:
var_dump($token);
var_dump($timestamp);
var_dump($correlationid);
var_dump($ack);
var_dump($version);
var_dump($build);
答案 2 :(得分:1)
您可以检查结果变量的字符串长度,以及它们是否包含特定的字符/数字等。这将允许您在将来混合字符串时收到通知,并可能还原一些不需要的操作。
使用strlen
获取并验证字符串长度。
检查$ack
变量是否以"ACK"
使用
strpos($ack, "ACK") === 0