esc_url(一串 $网址,字符串[] $协议 = 无效的,一串 $_上下文 = '显示' ):一串

检查并清除URL。

描述

将从URL中删除许多字符。如果URL用于显示(默认行为)和号,则也会被替换。这个'清除url'过滤器应用于返回的已清理URL。

参数

$网址一串必修的
要清理的URL。
$协议字符串[]可选择的
一系列可接受的协议。
默认为返回值wp_allowed_protocols().

违约:无效的

$_上下文一串可选择的
私人。使用消毒url()用于数据库使用。

违约:'显示'

返回

一串The cleaned URL after the'清除url'应用过滤器。
如果$网址指定中的协议以外的协议$协议,或者如果$url(网址)包含空字符串。

更多信息

转义url时始终使用esc_url(在文本节点、属性节点或其他任何位置)。对于消毒,消毒url()应改为使用。拒绝没有提供的白名单协议之一的URL(默认为http、https、ftp、ftps、mailto、news、irc、gopher、nntp、feed和telnet),删除无效字符并删除危险字符。此函数将字符编码为HTML实体:在生成(X)HTML或XML文档时使用它。将与号(&)和单引号(')编码为数字实体引用(&#038,&#039)。

如果URL似乎是不包含方案的绝对链接,则在前面加上前缀网址:http://请注意,还允许相对url(/my-url/parameter2/)、锚(#myanchor)和参数项(?myparam=yes),并将其作为特殊情况进行筛选,而无需在筛选的url之前添加默认协议。

替换不推荐的清除url().

来源

函数esc_url($url,$protocols=null,$_context='display'){$original_url=$url;if(“”===$url){返回$url;}$url=str_replace(“”,“%20”,ltrim($url));$url=preg_replace('|[^a-z0-9-+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i','',$url);if(“”===$url){返回$url;}如果(0!==stripos($url,'mailto:')){$strip=数组(“%0d”,“%0a”,“%0\r\n”,“%0”);$url=_deep_replace($strip,$url);}$url=str_replace(';//','://',$url);/**如果URL似乎不包含方案,我们假定*它需要添加http://前缀(除非是相对链接*以/、#或?开头?,或PHP文件)。*/如果(!str_contains($url,':')&&!in_array($url[0],数组('/','#','?'),true)&&! 预匹配('/^[a-z0-9-]+?\.php/i',$url)) {$url=“http://”$网址;}//仅在显示时替换与号和单引号。if(“显示”===$context){$url=wp_kses_normalize_entities($url);$url=str_replace('&','&',$url);$url=str_replace(“'”,''',$url);}if(str_contains($url,'[')||str_contings($url,']')){$parsed=wp_parse_url($url);$front=“”;if(isset($parsed['scheme']){$前面。=$已解析['scheme'].'://';}elseif('/'==$url[0]){$front.='//';}if(isset($parsed[“用户”]){$前面。=$已解析[“用户”];}if(isset($parsed['pass']){$front.=':'$解析[“pass”];}if(isset($parsed['user'])| | isset($parsed['pass'])){$front.=“@”;}if(isset($parsed['host'])){$前面。=$已解析[“主机”];}if(isset($parsed['port']){$front.=':'$已解析[“端口”];}$end_dirty=str_replace($front,'',$url);$end_clean=str_replace(数组(“[”,“]”),数组(“%5B”,“%5D”),$end_dirty);$url=str_replace($end_dirty,$end_clean,$url);}if('/'===$url[0]){$good_protocol_url=$url;}其他{if(!is_array($protocols)){$protocols=wp_allowed_protocols();}$good_prococol_url=wp_kses_bad_procol($url,$protocols);if(strtolower($good_protocol_url)!==strtollower($url)){返回“”;}}/***过滤已清理并转义为URL输出的字符串。**@自2.3.0起**@param string$good_protocol_url要返回的已清理url。*@param string$original_url清理之前的url。*@param string$_context如果为“display”,则仅替换与号和单引号。*/返回apply_filters('clean_url'、$good_prococol_url、$original_url、$_context);}

挂钩

应用筛选器(“clean_url”,一串 $good_protocol_url,一串 $original_url,一串 $_上下文 )

过滤已清理并转义为URL输出的字符串。

变更日志

版本描述
2.8.0介绍。

用户贡献的笔记

  1. 跳到注释5内容

    如果URI协议不是允许的协议之一,则esc_url()是空字符串。WordPress允许的默认协议列表可以用以下代码扩展:

    <?php程序/***扩展允许的协议列表。**@param array$protocols WordPress允许的默认协议列表。**@return array$protocols更新列表,包括新协议。*/函数wporg_extend_allowed_protocols($协议){$protocols[]=“skype”;$protocols[]=“spotify”;$protocols[]=“macappstores”;返回$protocols;}add_filter('kses_allowed_protocols','wporg_extend_allowed_protocols');?>

你必须登录在能够贡献笔记或反馈之前。