我们在前端输出URL时,可以使用esc_url函数删除一些无效字符和危险字符,不过在数据库查询、重定向、HTTP请求中就需要使用esc_url_raw函数或sanitize_url函数来清理了。
一、esc_url_raw函数
esc_url_raw( string $url, string[] $protocols = null ): string
清理URL以供数据库或重定向使用。
1、参数
- $url(string):必填,要清理的URL;
- $protocols(string[]):选填,一系列可接受的协议,默认返回值 wp_allowed_protocols(),默认值:null。
2、返回值
- 返回清理后的URL
3、示例
$url = 'http://wordpress.org';
$response = wp_remote_get( esc_url_raw( $url ) ); // no need to escape entities
if ( ! is_wp_error( $response ) ) {
echo wp_remote_retrieve_body( $response );
}
二、sanitize_url函数
sanitize_url( string $url, string[] $protocols = null ): string
清理URL以供数据库或重定向使用。
1、参数
- $url(string):必填,要清理的URL;
- $protocols(string[]):选填,一系列可接受的协议,默认返回值 wp_allowed_protocols(),默认值:null。
2、返回值
- 返回清理后的URL
3、示例
$new_input = sanitize_url( $input, array( 'http', 'https' ) );
特别说明
1、esc_url_raw函数不会替换用于显示的实体,用于前端显示URL不安全,请改用esc_url()函数。
2、esc_url_raw函数生成的URL可以安全地用于数据库查询和重定向,不过请不要将此函数用作HTTP请求的唯一清理程序,因为此函数无法针对SSRF等安全攻击进行清理,建议使用sanitize_url函数。
3、esc_url_raw()是(即它只是调用)sanitize_url()的别名,因此,esc_url_raw(‘URL’)等同于sanitize_url(‘URL’)。尽管esc_url_raw()仍然存在(即未弃用),但建议直接调用sanitize_url(),而不是esc_url_raw()包装器。
也就是说,在前端输出URL的,建议使用esc_url()函数;在数据库查询、重定向、HTTP请求使用URL的,建议使用sanitize_url()函数。