带数组的preg_replace_callback

时间:2016-09-09 05:49:04

标签: php preg-replace-callback

我最近将我的网站更新为PHP 5.6,自那以后,我开始使用e修饰符出错。

以下是导致问题的功能:

function blockPrepareDisplay() {
static $search = array('/(.)@(.)/se');
static $replace = array('"&#" .sprintf("%03d", ord("\\1")) .";@&#" .sprintf("%03d", ord("\\2")) . ";";');
$resarray = array();
foreach (func_get_args() as $var) {
    $var = htmlspecialchars($var, ENT_QUOTES);// Prepare var
    $var = preg_replace($search, $replace, $var);
    $var = preg_replace('/&#/', '&#', $var);
    $var = str_replace(" "," ",$var);
    $var = str_replace("&","&",$var);
    $resarray[] = $var;// Add to array
}
if (func_num_args() == 1) {// Return vars
    return $resarray[0];
} else {
    return $resarray;
  }
}

我理解静态$search = array('/(.)@(.)/se');行是e修饰符的行,我知道它已被弃用。一位朋友向我解释说,并解释说我伤口需要用preg_replace替换preg_replace_callback。我已经查看了php.net以及各地,但我认为这让我比以前更加困惑。

我已经尝试了几个星期现在有很多不同的事情,我有一个停止吐痰的错误,但我肯定它是错的,我更喜欢它是对的而不是错的。我这样做是为了取代preg_replace

$var = preg_replace_callback(
$search,
function($replace){
    foreach($replace as $replaces){
        return $replaces;
    }
}, 
$var
);

而不是$var = preg_replace($search, $replace, $var);。 我也删除了e修饰符。任何人都可以指出我的错误并举例说明我应该如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

回调函数的参数是匹配组的数组。

我不明白为什么要使用阵列进行搜索和更换部件,我会这样做:

abc@def.org

<强>输出:

angular.module('dopasujApp').factory('getProducts', ['$http', function ($http) {
var dataFactory = {};
dataFactory.sort='ASC';
dataFactory.orderBy='PRODUCT_NAME';
dataFactory.search='a';
dataFactory.filters={};
dataFactory.filters.ATTRIBS=[46,25];
dataFactory.filters.SIZE=[165,40];

getProducts.listProducts = function() {
    var request = $http({
        method: "POST", 
        url: "http://******/backend/internalAPI.php?action=getListing&fit=1&limit=10&vendor=20",
        headers: {
            'Content-Type': 'application/json'
        },
        data: {
            data: dataFactory
        }
    });

    var products = angular.fromJson(request);

    return products;
}

return false;

}]);