PHP不推荐使用:preg_replace():不推荐使用/ e修饰符,而是使用preg_replace_callback

时间:2017-10-24 05:49:36

标签: php

错误:已弃用

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="FirstCtrl as vm">
  <form name="form">
    <select name="folderId" ng-model="folder" data-ng-options="folder as folder.name for folder in folders track by folder.id"></select>
  </form>
</div>

如何使用preg_replace_callback而不是preg_replace?我试图替换preg_replace并得到另一个错误。

  

PHP警告:preg_replace_callback():需要参数2,'strtoupper(“\ 0”)',才能成为

中的有效回调

3 个答案:

答案 0 :(得分:1)

preg_replace_callback()应该指定一个精确的回调。 在此处查看有关preg_replace_callback()的更多信息:preg_replace_callback

if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
            $match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e', function ($matches) {
            return strtoupper("\0");
        }, strtolower(trim($match[1])));

答案 1 :(得分:0)

您需要使用实际的回调。请尝试以下方法:

 if( preg_match('/([^:]+): (.+)/m', $field, $match) ) {
            $match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e', function($matches){return strtoupper("\0");}, strtolower(trim($match[1])));

回调可以是上面的匿名函数,也可以是函数的名称作为字符串。

注意: \e修饰符已在中弃用,并且已从删除,您必须使用preg_replace_callback,无论您身在何处使用\e。点击此处了解详情。 Can someone explain the /e regex modifier?

答案 2 :(得分:0)

来自PHP documentationpreg_replace_callback签名:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

您需要传递一个回调函数作为第二个参数。

  $html = $_POST['html'];

  // uppercase headings
  $html = preg_replace_callback(
    '(<h([1-6])>(.*?)</h\1>)',
    function ($m) {
        return "<h$m[1]>" . strtoupper($m[2]) . "</h$m[1]>";
    },
    $html
  );