esc_url

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

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.

✈ 1 раз = 0.00012с = быстро | 50000 раз = 1.49с = быстро
Хуки из функции:
clean_url
Возвращает

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

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

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

Примеры

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

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

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

Код из


wp-includes/formatting.php

WP 4.7.2

<?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 );
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *