有人可以帮助我解决这个错误吗?
警告:preg_replace():不再支持/ e修饰符,请使用 改为preg_replace_callback
我的原始代码:
$url = 'https://kc.kobotoolbox.org/api/v1/stats';
$data = array (
// 'q' => 'nokia'
);
$params = '';
foreach($data as $key=>$value)
$params .= $key.'='.$value.'&';
$params = trim($params, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url.'?'.$params ); //Url together with parameters
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 7); //Timeout after 7 seconds
//curl_setopt($ch, CURLOPT_HEADER , false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$header = array();
$header[] = 'Content-length: 0';
$header[] = 'Content-type: application/json';
$header[] = 'Authorization: Token xxxxxxxx';
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
//curl_setopt($ch, CURLOPT_USERPWD, "USERNAME" . ":" . "PASSWORD");
$result = curl_exec($ch);
if(curl_errno($ch)) //catch if curl error exists and show it
echo 'Curl error: ' . curl_error($ch);
echo $result;
所以我尝试了这样:
$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
但我仍然得到同样的错误:
警告:preg_replace_callback():不再使用/ e修饰符 支持,请改用preg_replace_callback
答案 0 :(得分:2)
错误消息告诉您删除新代码中包含的e
修饰符。
/ (?<=^|[\x09\x20\x2D]). / e
^ ^------Pattern-------^ ^ ^ ---- Modifiers
| |
-------Delimiters-------
您需要删除修饰符,因此preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e', ...)
应为preg_replace_callback('/(?<=^|[\x09\x20\x2D])./' , ...)
。
顺便说一下,您在新代码中使用foreach
循环并没有受益。匹配将始终位于数组中的第二个项目中。这是一个不使用循环的例子:
$inputString = 'foobazbar';
$result = preg_replace_callback('/^foo(.*)bar$/', function ($matches) {
// $matches[0]: "foobazbar"
// $matches[1]: "baz"
return "foo" . strtoupper($matches[1]) . "bar";
}, $inputString);
// "fooBAZbar"
var_dump($result);