php 使用`e`修饰符替换preg_replace(),并调用preg_replace_callback()来修复序列化字符串中的无效字符计数

kb5ga3dv  于 2023-06-04  发布在  PHP
关注(0)|答案(1)|浏览(166)

如何更新此代码:

$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('$2').':\"$2\";'", $array);

使用preg_replace_callback函数?
谢谢

ddhy6vgd

ddhy6vgd1#

preg_replace_callback()preg_replace()非常相似,除了参数2是一个以$matches为参数的可调用函数。不要忘记删除/e修饰符,因为我们没有执行任何操作。

$array = array(
    's:1:"test";',
    's:2:"one more";',
);

$data = preg_replace_callback('!s:(\d+):"(.*?)";!', function($matches) {
    $string = $matches[2];
    $length = strlen($string);
    return 's:' . $length . ':"' . $string . '";';
}, $array);

print_r($data);
// Array ( [0] => s:4:"test"; [1] => s:8:"one more"; )

相关问题