Я использую следующее, чтобы найти все URL-адреса внутри $ content
$content = preg_match_all( '/(http[s]?:[^\s]*)/i', $content, $links );
Но это будет зависеть от http://
part в 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
. Что я делаю не так ?
(пожалуйста, никаких анонимных функций – я тестирую на старом сервере)
EDIT 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 }
Чтобы изменить регулярное выражение, вам уже нужно разрешить URL-адреса, начинающиеся с www
, вы просто напишете это:
/((http[s]?:|www[.])[^\s]*)/i + ++++++++