Я использую следующее, чтобы найти все URL внутри $ content
$content = preg_match_all( '/(http[s]?:[^\s]*)/i', $content, $links );
Но это будет зависеть от http://
части в http://www.google.com/some/path
.
Мои вопросы:
1 - Как я могу изменить его, чтобы использовать ссылки, которые начинаются только с www
, например www.google.com
?
2 - Основная цель - найти ссылки и заменить их значением, возвращаемым другой функцией. Я пробовал preg_match_callback (), но он не работает (вероятно, неправильно использовал ..
$content = preg_replace_callback(
"/(http[s]?:[^\s]*)/i",
"my_callback",
$content);
function my_callback(){
// do a lot of stuff independently of preg_replace
// adding to =.output...
return $output;
}
Теперь, по моей логике (которая, вероятно, неверна), все совпадения из $content
будут заменены на $output
. Что я делаю неправильно ?
(пожалуйста, никаких анонимных функций - я тестирую на старом сервере)
ИЗМЕНИТЬ I - после комментариев, пытаюсь уточнить подробности
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
}