回调wp_kses_split以修复格式错误的HTML标记。

原型

wp_kses_split2( string $string, array $allowed_html, array $allowed_protocols )

描述

这个功能做了很多工作。它拒绝了一些非常不正确的事情,比如<:::>。如果不允许该元素,它返回一个空字符串(看看ma,没有strip_tags()!)。否则,它会将标记拆分为元素和属性列表。

参数

$string (string) (Required) 要过滤的内容

$allowed_html (array) (Required) 允许的HTML元素

$allowed_protocols (array) (Required) 允许的协议保持

返回值

(string)  修复了HTML元素

源文件

路径:wp-includes/kses.php

<?php
...
function wp_kses_split2($string, $allowed_html, $allowed_protocols) {
	$string = wp_kses_stripslashes($string);
	if (substr($string, 0, 1) != '<')
		return '&gt;';
	// It matched a ">" character
	if ( '<!--' == substr( $string, 0, 4 ) ) {
		$string = str_replace( array('<!--', '-->'), '', $string );
		while ( $string != ($newstring = wp_kses($string, $allowed_html, $allowed_protocols)) )
			$string = $newstring;
		if ( $string == '' )
			return '';
		// prevent multiple dashes in comments
		$string = preg_replace('/--+/', '-', $string);
		// prevent three dashes closing a comment
		$string = preg_replace('/-$/', '', $string);
		return "<!--{$string}-->";
	}
	// Allow HTML comments
	if (!preg_match('%^<s*(/s*)?([a-zA-Z0-9-]+)([^>]*)>?$%', $string, $matches))
		return '';
	// It's seriously malformed
	$slash = trim($matches[1]);
	$elem = $matches[2];
	$attrlist = $matches[3];
	if ( ! is_array( $allowed_html ) )
		$allowed_html = wp_kses_allowed_html( $allowed_html );
	if ( ! isset($allowed_html[strtolower($elem)]) )
		return '';
	// They are using a not allowed HTML element
	if ($slash != '')
		return "</$elem>";
	// No attributes are allowed for closing elements
	return wp_kses_attr( $elem, $attrlist, $allowed_html, $allowed_protocols );
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/wp_kses_split2/