由于PHP7的更新,我需要将插件中的两行替换为preg_replace
到preg_replace_callback()
。我觉得它可能很简单,但我不知道如何解决它。
原作是:
for ($i = 0; $i < count($links); $i++)
{
$link = $links[$i];
if ($link['hasNum'] >= $link['maxNum']) continue;
$replace = '<a' . ($linxCSS != '' ? ' class="' . $linxCSS . '"' : '') . ' href="' . $link['href'] . '">$2</a>';
if ($linxCSS != '') $replace = '<span class="' . $linxCSS . '">' . $replace . '</span>';
$replace = '$1' . $replace . '$3';
$search = "~([\s\.\,\;\!\?\:\>\(\)\'\"\*\/«])(" . $link['words'] . ")([\*\/\'\"\(\)\<\s\.\,\;\!\?\:»])~siu";
$body = preg_replace("~(<a)(.*?)(?=<\/a>)(<\/a>)~sie", '"<:ZyX>".plgSystemSeolinks::maskContent("$1$2$3")."<:ZyX/>"', $body);
$body = preg_replace($search, $replace, $body, $link['maxNum']);
if ($body == '') return false;
$link['hasNum']+= substr_count($body, '<a ');
$links[$i] = $link;
}
答案 0 :(得分:-1)
(更新:修正了错字)
回调将像这样完成
for ( $i = 0; $i < count($links); $i++ )
{
$link = $links[$i];
if( $link['hasNum'] >= $link['maxNum'] )
continue;
$replace = '<a' . ( $linxCSS != '' ? ' class="' . $linxCSS . '"' : '' ) . ' href="' . $link['href'] . '">$2</a>';
if ( $linxCSS != '' )
$replace = '<span class="' . $linxCSS . '">' . $replace . '</span>';
$replace = '$1' . $replace . '$3';
$search = '~([\s.,;!?:>()\'"*/«])(' . $link['words'] . ')([*/\'"()<\s.,;!?:»])~siu';
$body = preg_replace_callback( '~(<a)(.*?)(?=</a>)(</a>)~si' ,
function( $m ){
$msk = $m[1] . $m[2] . $m[3];
return '<:ZyX>' . plgSystemSeolinks::maskContent( $msk ) . '<:ZyX/>';
},
$body );
$body = preg_replace( $search, $replace, $body, $link['maxNum'] );
if ( $body == '' )
return false;
$link['hasNum'] += substr_count($body,'<a ');
$links[$i] = $link;
}