WPSEO_Utils::sanitize_url
Sanitize a url for saving to the database. Not to be confused with the old native WP function.
Метод класса: WPSEO_Utils{}
Хуков нет.
Возвращает
Строку.
Использование
$result = WPSEO_Utils::sanitize_url( $value, $allowed_protocols, fooo ] );
- $value(строка) (обязательный)
- String URL value to sanitize.
- $allowed_protocols(массив)
- Optional set of allowed protocols.
По умолчанию:[ foo - fooo ](обязательный)
- .
Список изменений
| С версии 1.8.0 | Введена. |
Код WPSEO_Utils::sanitize_url() WPSEO Utils::sanitize url Yoast 27.6
public static function sanitize_url( $value, $allowed_protocols = [ 'http', 'https' ] ) {
$url = '';
$parts = wp_parse_url( $value );
if ( isset( $parts['scheme'], $parts['host'] ) ) {
$url = $parts['scheme'] . '://';
if ( isset( $parts['user'] ) ) {
$url .= rawurlencode( $parts['user'] );
$url .= isset( $parts['pass'] ) ? ':' . rawurlencode( $parts['pass'] ) : '';
$url .= '@';
}
$parts['host'] = preg_replace(
'`[^a-z0-9-.:\[\]\\x80-\\xff]`',
'',
strtolower( $parts['host'] ),
);
$url .= $parts['host'] . ( isset( $parts['port'] ) ? ':' . (int) $parts['port'] : '' );
}
if ( isset( $parts['path'] ) && strpos( $parts['path'], '/' ) === 0 ) {
$path = explode( '/', wp_strip_all_tags( $parts['path'] ) );
$path = self::sanitize_encoded_text_field( $path );
$url .= str_replace( '%40', '@', implode( '/', $path ) );
}
if ( ! $url ) {
return '';
}
if ( isset( $parts['query'] ) ) {
wp_parse_str( $parts['query'], $parsed_query );
$parsed_query = array_combine(
self::sanitize_encoded_text_field( array_keys( $parsed_query ) ),
self::sanitize_encoded_text_field( array_values( $parsed_query ) ),
);
$url = add_query_arg( $parsed_query, $url );
}
if ( isset( $parts['fragment'] ) ) {
$url .= '#' . self::sanitize_encoded_text_field( $parts['fragment'] );
}
if ( strpos( $url, '%' ) !== false ) {
$url = preg_replace_callback(
'`%[a-fA-F0-9]{2}`',
static function ( $octects ) {
return strtolower( $octects[0] );
},
$url,
);
}
return esc_url_raw( $url, $allowed_protocols );
}