我对使用有点困惑preg_replace_callback()
我有一个$content
里面有一些网址。
以前我用
$content = preg_match_all( '/(http[s]?:[^\s]*)/i', $content, $links );
foreach ($links[1] as $link ) {
// we have the link. find image , download, replace the content with image
// echo '</br>LINK : '. $link;
$url = esc_url_raw( $link );
$url_name = parse_url($url);
$url_name = $description = $url_name['host'];// get rid of http://..
$url = 'http://somescriptonsite/v1/' . urlencode($url) . '?w=' . $width ;
}
return $url;
但我真正需要的是用我解析的 URL 替换原始 URL ...
所以我尝试了 preg_replace_callback:
function o99_simple_parse($content){
$content = preg_replace_callback( '/(http[s]?:[^\s]*)/i', 'o99_simple_callback', $content );
return $content;
}
和 :
function o99_simple_callback($url){
// how to get the URL which is actually the match? and width ??
$url = esc_url_raw( $link );
$url_name = parse_url($url);
$url_name = $description = $url_name['host'];// get rid of http://..
$url = 'http://something' . urlencode($url) . '?w=' . $width ;
return $url; // what i really need to replace
}
我假设回调将以每个匹配项都会调用回调(递归?)并返回 results 的方式工作,从而允许用解析$url
的 from动态替换 $content 中的 URL o99_simple_callbac()
。
如果实际上传递了整个匹配数组,那么我之前使用的(在第一个示例中)和回调示例preg_replace_callback()
之间实际上有什么区别?preg_match_all()
我错过了什么/误解了什么?$content
用解析的 url替换找到的 URL 的正确方法是什么?