wp_extract_urls() WP 3.7.0

Використовує регулярний вираз, щоб «витягти» всі посилання (URL) із переданого тексту.

Основа для:
do_enclose()
1 раз – 0.000114 сек
(швидко) | 50000 разів – 0.19 сек
(дуже швидко) |
PHP 7.0.8, WP 4.6.1

Хуків немає.

Повертає

Строку[]. URL знайдені у переданому рядку.

Використання

wp_extract_urls($content);
$content
(рядок) (обов’язковий)
Контент, з якого потрібно отримати посилання (URL).

Приклади

0

#1 Приклад отримання посилань з переданого контенту

$content = 'Початок тексту з посиланням: http://wp-kama.ru/
Продовження тепер посилання буде в html <a href="http://wp-example.com/foo">посилання</a>.
І ще один варіант, але тепер шлях це буде посилання на картинку:
<img alt="" src="http://sitename.ru/image.jpg">. Ну і все, поки вистачить.

$urls = wp_extract_urls($content);

/* $urls міститиме такий масив:
Array
(
	[0] => http://wp-kama.ru/
	[1] => http://wp-example.com/foo
	[2] => http://sitename.ru/image.jpg
)
*/
0

#2 Не працює для URL-адрес localhost без TLD:

$content = '
<a href="http://localhost.com:8889/?p=9">hi</a>
<a href="http://localhost:8889/?p=9">hi</a>     
';

$urls = wp_extract_urls($content);

/* $urls міститиме такий масив:
Array
(
	[0] => http://localhost.com:8889/?p=9
)
*/

See this ticket .

список змін

З версії 3.7.0Введено.
З версії 6.0.0Fixes support for HTML entities (Trac 30580).

Код wp_extract_urls() WP 6.0.2

function wp_extract_urls( $content ) {
	preg_match_all(
		"#(["']?)("
			. '(?:([w-]+:)?//?)'
			. '[^s()<>]+'
			. '[.]'
			. '(?:'
				. '([wd]+)|'
				. '(?:'
					. "[^`!()[]{}:'".,<>«»“”''s]|"
					. '(?:[:]d+)?/?'
				. ')+'
			. ')'
		. ")1#",
		$content,
		$post_links
	);

	$post_links = array_unique(
		array_map(
			static function( $link ) {
				// Decode to replace valid entities, як &.
				$link = html_entity_decode($link);
				// Maintain backward compatibility by removing extraneous semi-colons (`;`).
				return str_replace( ';', '', $link );
			},
			$post_links[2]
		)
	);

	return array_values($post_links);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *