从包含属性的字符串构建属性列表。

原型

wp_kses_hair( string $attr, array $allowed_protocols )

描述

这个功能做了很多工作。它将属性列表解析为具有属性数据的数组,并尝试做正确的事情,即使它得到奇怪的输入。它将在属性值周围添加引号,这些属性值周围没有任何引号或撇号,以便更容易生成符合W3C HTML规范的HTML代码。它还将从属性值中删除错误的URL协议。它还通过使用首先定义的属性来减少重复属性(foo =’bar’foo =’baz’将导致foo =’bar’)。

参数

$attr (string) (Required) 从HTML元素到关闭HTML元素标记的属性列表

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

返回值

(array)  解析后的属性列表

源文件

路径:wp-includes/kses.php

<?php
...
function wp_kses_hair($attr, $allowed_protocols) {
	$attrarr = array();
	$mode = 0;
	$attrname = '';
	$uris = array('", 'vless' => 'n');
					}
					$working = 1;
					$mode = 0;
					$attr = preg_replace("/^'[^']*'(s+|$)/", '', $attr);
					break;
				}
				if (preg_match("%^([^s"']+)(s+|/?$)%", $attr, $match))
					// value
					{
					$thisval = $match[1];
					if ( in_array(strtolower($attrname), $uris) )
						$thisval = wp_kses_bad_protocol($thisval, $allowed_protocols);
					if(false === array_key_exists($attrname, $attrarr)) {
						$attrarr[$attrname] = array ('name' => $attrname, 'value' => $thisval, 'whole' => "$attrname="$thisval"", 'vless' => 'n');
					}
					// We add quotes to conform to W3C's HTML spec.
					$working = 1;
					$mode = 0;
					$attr = preg_replace("%^[^s"']+(s+|$)%", '', $attr);
				}
				break;
		} // switch
		if ($working == 0) // not well formed, remove and try again
		{
			$attr = wp_kses_html_error($attr);
			$mode = 0;
		}
	} // while
	if ($mode == 1 && false === array_key_exists($attrname, $attrarr))
		// special case, for when the attribute list ends with a valueless
		// attribute like "selected"
		$attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y');
	return $attrarr;
}
...
?>

其他

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