Je suis un peu confus quant à l'utilisation de preg_replace_callback()
J'ai un $content
avec des URLs à l'intérieur.
Auparavant, j'utilisais
$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;
Mais ce dont j'ai vraiment besoin, c'est de REMPLACER l'URL originale par mon URL analysée...
J'ai donc essayé le preg_replace_callback :
function o99_simple_parse($content){
$content = preg_replace_callback( '/(http[s]?:[^\s]*)/i', 'o99_simple_callback', $content );
return $content;
}
et :
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
}
J'ai supposé que la fonction de rappel fonctionnera de telle sorte que CHAQUE correspondance appellera la fonction de rappel (de manière récursive ?) et renverra les résultats, ce qui permettra de remplacer à la volée les URL dans $content par les URL analysées. $url
de o99_simple_callbac()
.
Mais un autre pregunta ici (et surtout ce commentaire ) a déclenché mes doutes.
Si le preg_replace_callback()
passe en fait le tableau entier de correspondances, alors quelle est la différence entre ce que j'ai utilisé précédemment ( preg_match_all()
dans le premier exemple) et l'exemple de rappel ?
Qu'est-ce que j'ai manqué ou mal compris ? Quelle serait la manière correcte de remplacer les URLs trouvés dans $content
avec les urls analysées ?