我正在处理一些web项目,这些项目处理以下格式的HTTP API响应:
{response_header1=value1,response_header2,value2,response_header3=value3,response_header4=,response_header5=value5}
或
error xxx,err_desc=Invalid password
这些响应看起来不像标准的XML
或JSON
格式。我想知道在PHP
中处理这些类型的响应的最佳方式是什么。
以下代码将处理您从正在使用的API发布的标准响应:
$var = '{response_header1=value1,response_header2,value2,response_header3=value3,response_header4=,response_header5=value5}';
if(strpos($var, '}') !== false) {
parse_str(str_replace(',','&',trim($var,'{}')), $var);
var_export($var);
} else {
echo 'error';
}
如果您需要处理特定的错误值,您可以访问并解析我放置echo
语句的位置。我所做的是去掉左右两边的大括号,然后将整个字符串转换为标准的URL查询,parse_url
命令解析该查询,并将其存储为名为$var
的变量中的键=>值集(如访问$_POST或$_REQUEST vars)——您可以从var_export($var)
命令中看到此结果。
这也比explode
快得多
您可能需要用正则表达式编写一个自定义转换器,或者需要在代码中进行转换。下面是一个没有正则表达式的内联转换示例:
$incoming = "{response_header1=value1,response_header2=value2,response_header3=value3,response_header4=,response_header5=value5}";
$splitted = explode(",", trim($incoming,'{}'));
$values = array();
foreach($splitted as $split) {
$exploded = explode("=",$split);
$values[$exploded[0]] = $exploded[1];
}