WPSEO_Sitemaps_Renderer::encode_url_rfc3986()protectedYoast 1.0

Apply some best effort conversion to comply with RFC3986.

Метод класса: WPSEO_Sitemaps_Renderer{}

Хуков нет.

Возвращает

Строку.

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->encode_url_rfc3986( $url );
$url(строка) (обязательный)
URL to encode.

Код WPSEO_Sitemaps_Renderer::encode_url_rfc3986() Yoast 22.4

protected function encode_url_rfc3986( $url ) {

	if ( filter_var( $url, FILTER_VALIDATE_URL ) ) {
		return $url;
	}

	$path = wp_parse_url( $url, PHP_URL_PATH );

	if ( ! empty( $path ) && $path !== '/' ) {
		$encoded_path = explode( '/', $path );

		// First decode the path, to prevent double encoding.
		$encoded_path = array_map( 'rawurldecode', $encoded_path );

		$encoded_path = array_map( 'rawurlencode', $encoded_path );
		$encoded_path = implode( '/', $encoded_path );

		$url = str_replace( $path, $encoded_path, $url );
	}

	$query = wp_parse_url( $url, PHP_URL_QUERY );

	if ( ! empty( $query ) ) {

		parse_str( $query, $parsed_query );

		$parsed_query = http_build_query( $parsed_query, '', '&', PHP_QUERY_RFC3986 );

		$url = str_replace( $query, $parsed_query, $url );
	}

	return $url;
}