所以我有为php 5.6编写的php函数。我认为this最初是我将它们放在一起时的来源。我做了一些更改。这是我最终得到的代码:
function Format($input){
//escape input
$search = array(
'/\[b\](.*?)\[\/b]/is',
'/\[i\](.*?)\[\/i]/is',
'/\[u\](.*?)\[\/u]/is',
'/\[s\](.*?)\[\/s]/is',
'/\[img\](.*?)\[\/img\]/is',
'/\[color=(.*?)\](.*?)\[\/color\]/is',
'/\[quote=(.*?)\]/e',
'/\[p\](.*?)\[\/p]/is',
);
$replace = array(
'<b>$1</b>',
'<i>$1</i>',
'<u>$1</u>',
'<s>$1</s>',
'<img src="$1">',
'<font style="color:$1;">$2</font>',
'GenerateQuote($1)',
'<a style="color:#ff6600" href=https://' . $_SERVER['SERVER_NAME'] .'/(...)/$1>$1</a>'
);
return preg_replace($search, $replace, $input);
}
function GenerateQuote($commentID){
$sqlresult = mysqli_query($db, "(...)");
(...)
return $QuoteCode;
}
该函数用于将文本中的BB标签转换为相应的HTML标签。 quote标记使用的/ e参数在PHP 7中不再受支持。
preg_replace():/ e修饰符不再受支持,请改用preg_replace_callback
有人可以帮助我将这段代码从PHP 5.6迁移到PHP 7吗?我不知道该怎么做。
答案 0 :(得分:1)
大多数表达式不包含e修饰符,因此它们可以保持原样。但是您需要拆分数组,并分别处理eval表达式。
从search
和replace
中删除最后两行。然后:
$tmp = preg_replace($search, $replace, $input);
应用前六个替换项。然后使用preg_replace_callback删除e修饰符:
$tmp = preg_replace_callback('/\[quote=(.*?)\]/',
function ($m) { return GenerateQuote($m[1]); },
$tmp);
最后一部分只是一个简单的替换(从您的问题中复制粘贴)。
return preg_replace('/\[p\](.*?)\[\/p]/is',
'<a style="color:#ff6600" href=https://' . $_SERVER['SERVER_NAME'] .'/(...)/$1>$1</a>',
$tmp);
应该这样做,但是如果您仅在该位置使用GenerateQuote
,则可以重写该函数以接受数组并将其直接用作回调。