WordPress как на ладони
wordpress jino

esc_url() WP 2.8

Очищает УРЛ для использования его в тексте, изменяет неправильные и удаляет опасные символы.

esc_url() в отличии от esc_url_raw() готовит строку к выводу на экран.

Всегда используйте esc_url, когда нужно очистить УРЛы, например, в тексте, в атрибутах HTML тегов или где-либо еще.

Функция создает символы в виде HTML сущностей, используйте её при создании (X)HTML или XML документов. Меняет амперсанд ( & ) и кавычку ('), на их сущности &#038, &#039.

Избегайте УРЛов, в которых не используется нужный протокол, т.е. УРЛ должен начинаться с одного из: http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet.

Используется в: esc_url_raw().
✈ 1 раз = 0.000052с = очень быстро | 50000 раз = 0.31с = очень быстро PHP 7.1.2, WP 4.7.3
Хуки из функции:
Возвращает

Строку. Очищенный УРЛ.

Использование

$url = esc_url( $url, $protocols, $_context );
$url(строка) (обязательный)
УРЛ, который нужно очистить.
По умолчанию: нет
$protocols(массив)
Массив принимаемых протоколов. По умолчанию это: http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet.
По умолчанию: null
$_context(строка)
Как будет использоваться УРЛ. Может быть display или ''. Если display, то амперсанд ( & ) и кавычки ('), будут заменены на их сущности.
По умолчанию: 'display'

Примеры

#1. Демонстрация очистки URL

$url = "http;//domen.ru/ssilka?var='some&";

echo esc_url( $url );
// выведет: http://domen.ru/ssilka?var='some&

#1. Относительный URL

echo esc_url( '/foo' ); //> /foo

Код esc url: wp-includes/formatting.php VER 4.9.1

<?php
function esc_url( $url, $protocols = null, $_context = 'display' ) {
	$original_url = $url;

	if ( '' == $url )
		return $url;

	$url = str_replace( ' ', '%20', $url );
	$url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', '', $url);

	if ( '' === $url ) {
		return $url;
	}

	if ( 0 !== stripos( $url, 'mailto:' ) ) {
		$strip = array('%0d', '%0a', '%0D', '%0A');
		$url = _deep_replace($strip, $url);
	}

	$url = str_replace(';//', '://', $url);
	/* If the URL doesn't appear to contain a scheme, we
	 * presume it needs http:// prepended (unless a relative
	 * link starting with /, # or ? or a php file).
	 */
	if ( strpos($url, ':') === false && ! in_array( $url[0], array( '/', '#', '?' ) ) &&
		! preg_match('/^[a-z0-9-]+?\.php/i', $url) )
		$url = 'http://' . $url;

	// Replace ampersands and single quotes only when displaying.
	if ( 'display' == $_context ) {
		$url = wp_kses_normalize_entities( $url );
		$url = str_replace( '&amp;', '&#038;', $url );
		$url = str_replace( "'", '&#039;', $url );
	}

	if ( ( false !== strpos( $url, '[' ) ) || ( false !== strpos( $url, ']' ) ) ) {

		$parsed = wp_parse_url( $url );
		$front  = '';

		if ( isset( $parsed['scheme'] ) ) {
			$front .= $parsed['scheme'] . '://';
		} elseif ( '/' === $url[0] ) {
			$front .= '//';
		}

		if ( isset( $parsed['user'] ) ) {
			$front .= $parsed['user'];
		}

		if ( isset( $parsed['pass'] ) ) {
			$front .= ':' . $parsed['pass'];
		}

		if ( isset( $parsed['user'] ) || isset( $parsed['pass'] ) ) {
			$front .= '@';
		}

		if ( isset( $parsed['host'] ) ) {
			$front .= $parsed['host'];
		}

		if ( isset( $parsed['port'] ) ) {
			$front .= ':' . $parsed['port'];
		}

		$end_dirty = str_replace( $front, '', $url );
		$end_clean = str_replace( array( '[', ']' ), array( '%5B', '%5D' ), $end_dirty );
		$url       = str_replace( $end_dirty, $end_clean, $url );

	}

	if ( '/' === $url[0] ) {
		$good_protocol_url = $url;
	} else {
		if ( ! is_array( $protocols ) )
			$protocols = wp_allowed_protocols();
		$good_protocol_url = wp_kses_bad_protocol( $url, $protocols );
		if ( strtolower( $good_protocol_url ) != strtolower( $url ) )
			return '';
	}

	/**
	 * Filters a string cleaned and escaped for output as a URL.
	 *
	 * @since 2.3.0
	 *
	 * @param string $good_protocol_url The cleaned URL to be returned.
	 * @param string $original_url      The URL prior to cleaning.
	 * @param string $_context          If 'display', replace ampersands and single quotes only.
	 */
	return apply_filters( 'clean_url', $good_protocol_url, $original_url, $_context );
}

Cвязанные функции

Из метки: esc_ (очистка валидация)

Еще из раздела: Очистка данных

esc_url 7 комментариев
  • Александр

    Здравствуйте, сейчас переношу сайт с бесплатного хоста на нормальный. Переносить приходится каждую страницу руками. Но столкнулся с такой проблемой- нужно сохранить адреса страниц и не могу в адрес вставить знаки- запятая, точка и т.п. Всё что я сам сам смог сделать это добавить в конец .html Вот например страница имеет такой адрес http://сайт.ru/nlo,-prishelci.html после переноса http://сайт.ru/nlo-prishelci.html запятая пропала и естественно эта страница будет не доступна по прежнему адресу. С начала я не предал этому значения так как страниц с такими "косяками" очень мало и можно как то решить но когда я посмотрел страницы новостей то пришлось задуматься, они имеют такой формат до news.868376.stounhendg-na-marse.html после news-868376-stounhendg-na-marse.html а страниц там 255 все в индексе. Есть у кого нибудь мысли по этому поводу?

    Ответить2 года назад #
    • Kama4697

      Соберите все старые адреса и сделайте 301 редирект на новые... Соберите массив вида: старый урл => новый урл. Поищите в сети решение...

      Ответить2 года назад #
  • campusboy1951 cайт: www.youtube.com/c/wpplus

    Стоить заметить, что если написать так:

    printf( '<li><a href="/%s">%s</a></li>' , esc_url( $cat->category_nicename ), esc_html( $cat->name ) );

    То вернётся:

    <li><a href="/http://avtomobili">Автомобили</a></li>

    А если написать так (верное написание):

    printf( '<li><a href="%s">%s</a></li>' , esc_url( '/'.$cat->category_nicename ), esc_html( $cat->name ) );

    То вернет как надо:

    <li><a href="/avtomobili">Автомобили</a></li>
    1
    Ответить1.5 года назад #
  • petrozavodsky706 cайт: alkoweb.ru

    будут заменены на из сущности.

    Опечатка ИХ

    Ответитьгод назад #
  • Александр

    Опечатка:
    "По умолчанию: 'dispaly'"

    Ответить3 месяца назад #

Здравствуйте, !

Ваш комментарий