Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_replace_callback():要求参数2是有效的回调_Php - Fatal编程技术网

Php preg_replace_callback():要求参数2是有效的回调

Php preg_replace_callback():要求参数2是有效的回调,php,Php,我正在通过一些预先制作的网站学习PHP,这样我就可以看到它是如何完成的,因为我是一名视觉学习者,但我遇到了一个问题 我说了一个错误 preg_replace():不推荐使用/e修饰符,请改用preg_replace_回调 现在我知道发生这种情况是因为一个较新的PHP不支持preg\u replace(),但是preg\u replace\u callback(),但是在更改它时,我得到了以下错误: preg_replace_callback():要求参数2“preg_replace('/(.{5

我正在通过一些预先制作的网站学习PHP,这样我就可以看到它是如何完成的,因为我是一名视觉学习者,但我遇到了一个问题

我说了一个错误

preg_replace():不推荐使用/e修饰符,请改用preg_replace_回调

现在我知道发生这种情况是因为一个较新的PHP不支持
preg\u replace()
,但是
preg\u replace\u callback()
,但是在更改它时,我得到了以下错误:

preg_replace_callback():要求参数2“preg_replace('/(.{59})/'”、“\$1<>”、“$1')是有效的回调

该代码在一个被分成两个单独的聊天框中生成太长的消息,无法将所有字母都保留在聊天窗口中

错误位于第20行,其中只有
$msg)

if ($shoutbox['fixLongWords'] > 5 && $shoutbox['fixLongWords'] < $shoutbox['maxMsgLenght'])
{
    $non_breaking_space = $context['utf8'] ? ($context['server']['complex_preg_chars'] ? '\x{A0}' : "\xC2\xA0") : '\xA0';

    if ($context['browser']['is_gecko'] || $context['browser']['is_konqueror'])
        $breaker = '<span style="margin:0 -0.5ex 0 0"> </span>';
    elseif ($context['browser']['is_opera'])
        $breaker = '<span style="margin:0 -0.65ex 0 -1px"> </span>';
    else
        $breaker = '<span style="width:0;margin:0 -0.6ex 0 -1px"> </span>';

    $shoutbox['fixLongWords'] = (int) min(1024, $shoutbox['fixLongWords']);

    if (strlen($msg) > $shoutbox['fixLongWords'])
    {
        $msg = strtr($msg, array($breaker => '< >', '&nbsp;' => $context['utf8'] ? "\xC2\xA0" : "\xA0"));
        $msg = preg_replace(
            '~(?<=[>;:!? ' . $non_breaking_space . '\]()]|^)([\w\.]{' . $shoutbox['fixLongWords'] . ',})~e' . ($context['utf8'] ? 'u' : ''),
            'preg_replace(\'/(.{' . ($shoutbox['fixLongWords'] - 1) . '})/' . ($context['utf8'] ? 'u' : '') . '\', \'\\$1< >\', \'$1\')',
            $msg);
        $msg = strtr($msg, array('< >' => $breaker, $context['utf8'] ? "\xC2\xA0" : "\xA0" => '&nbsp;'));
    }
}
if($shoutbox['fixLongWords']>5&&$shoutbox['fixLongWords']<$shoutbox['maxMsgLenght']))
{
$non_breaking_space=$context['utf8']?($context['server']['complex_preg_chars']?'\x{A0}':“\xC2\xA0”):'\xA0';
如果($context['browser']['is_gecko']| |$context['browser']['is_konkeror']))
$breaker='';
elseif($context['browser']['is_opera']))
$breaker='';
其他的
$breaker='';
$shoutbox['fixLongWords']=(int)min(1024,$shoutbox['fixLongWords']);
if(strlen($msg)>$shoutbox['fixLongWords'])
{
$msg=strtr($msg,array($breaker=>'<>',''=>$context['utf8']?“\xC2\xA0:“\xA0”);
$msg=preg\u替换(
“~(?;:!?”.$non_breaking_space.\]()]|^)([\w\.]{.$shoutbox['fixLongWords'.],})~e.($context['utf8']?'u':”),
“preg\u replace(\'/(.{.($shoutbox['fixLongWords']-1)。”)/。($context['utf8']?'u':'')。”,“\'\$1<>\',“$1\”),
$msg);
$msg=strtr($msg,数组(“<>”=>$breaker,$context['utf8']?“\xC2\xA0”:“\xA0”=>”);
}
}
有人知道问题的原因吗?

PHP文档如下所示

使用回调执行正则表达式搜索和替换:

mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )
preg\u replace\u callback()
的第二个参数是一个匿名函数,例如
function(){…}
,或者是一个函数名,例如
“functionNameAsString”
,然后像我看到的普通函数一样定义它。谢谢你的解释,虽然我刚刚注意到我的家庭电脑上有一个更新的PHP版本,而不是学校服务器上的,所以我会一直等到学校更新,如果问题再次出现,我会问老师。谢谢你的帮助:)如果我可以问一下,这两个版本是什么? string handler ( array $matches )