PHP7 - 不再支持/ e修饰符,而是使用preg_replace_callback

时间:2018-03-18 13:03:03

标签: php preg-replace preg-replace-callback

有人可以帮助我解决这个错误吗?

  

警告: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

1 个答案:

答案 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);