函数wp_kses_bad_protocol_once用于过滤掉非法的URL协议。下面是详细的用法教程解析:

1. 函数定义:

wp_kses_bad_protocol_once( $string, $allowed_protocols );

- $string:需要过滤的字符串。
- $allowed_protocols:允许的URL协议,以数组形式传入。

2. 函数功能:该函数在字符串中过滤掉非法的URL协议,并返回过滤后的字符串。

3. 函数实现:

function wp_kses_bad_protocol_once($string, $allowed_protocols) {
$string = wp_kses_no_null($string);
$string = wp_kses_normalize_entities($string);
$string = wp_kses_hook($string, 'wp_kses_bad_protocol');
return wp_kses_bad_protocol_once2($string, $allowed_protocols);
}

- 首先,通过函数wp_kses_no_null()过滤掉空字符。
- 然后,通过函数wp_kses_normalize_entities()对实体进行归一化处理。
- 接着,通过函数wp_kses_hook()对字符串进行过滤。该函数会触发过滤器wp_kses_bad_protocol,允许开发者自定义过滤规则。
- 最后,调用函数wp_kses_bad_protocol_once2()进行协议过滤。

4. 函数wp_kses_bad_protocol_once2的实现:

function wp_kses_bad_protocol_once2($string, $allowed_protocols) {
if (strpos($string, ':') === false )
return $string;

$string = wp_kses_decode_entities($string);
$string = preg_replace('|s+|', ' ', $string);
$string = wp_kses_split($string, ':', 'wp_kses_bad_protocol_once4');

$good_protocol_url = wp_kses_bad_protocol_once3( $string, $allowed_protocols );

if ( '' != $good_protocol_url ) {
return $good_protocol_url;
} else {
return '';
}
}

- 首先,通过函数wp_kses_decode_entities()对实体进行解码。
- 然后,通过正则表达式替换多个连续的空白字符为一个空格。
- 接着,调用函数wp_kses_split()将字符串按冒号进行分割,并将分割结果作为回调函数wp_kses_bad_protocol_once4的参数进行处理。
- 最后,调用函数wp_kses_bad_protocol_once3()进行协议过滤,并返回过滤后的结果。

综上,函数wp_kses_bad_protocol_once的作用是过滤掉字符串中的非法URL协议,可以根据传入的允许协议数组进行过滤规则的设定。