【发布时间】:2013-12-06 06:32:37
【问题描述】:
这是引入弃用错误之前的 PHP 代码:
array_walk( $tags, 'shortcode_tag_parse', &$content );
function shortcode_tag_parse( &$tag, $key, &$content ) {
$content = preg_replace_callback( "{\[{$tag}[^\]]*\].*?\[/{$tag}\]}is", 'shortcode_img_unautop', $content );
}
// Replace <p> tags around images
function shortcode_img_unautop( $match ) {
return preg_replace( '#\s*<p>\s*(<a .*>)?\s*(<img .*>)\s*(<\/a>)?\s*<\/p>\s*#iU', '\1\2\3', $match[0] );
}
现在,如果我删除通话时间参考:
array_walk( $tags, 'shortcode_tag_parse', $content );
它不再修改 $content,我绝对需要这样做。我不会满足于切换到循环。我看过的其他主题只是说删除调用时引用&,当我这样做时,它不再做它应该做的事情。
有谁知道我怎样才能让我的代码再次工作,而不需要循环(array_walk 和 array_map 对我来说看起来更好)。
【问题讨论】:
-
你可以用你自己的定义实现你自己的array_walk版本。
-
看起来你正在实现一个 BBCode 解析器。这是一个已解决的问题,如果可以的话,可能应该使用第三方库代码,而不是自己动手。
-
@Charles 这不是解析 BBCODE,它只是剥离在 bbcode/shortcode 之间的图像周围发现的
标签。 WordPress 的内置解析器仍在使用中。
$tags来自它使用的 WordPress 自己的短代码正则表达式,所以我知道它们存在并且有正确的结束标签。
标签: php pass-by-reference preg-replace-callback