wp_kses_hair()
2020-08-12 23:32:13
wordpress函数
阅读:534
wp_kses_hair( string $attr, string[] $allowed_protocols )
从包含属性的字符串生成属性列表。
Builds an attribute list from string containing attributes.
目录锚点:#说明#参数#源码
这个函数做了很多工作。它将一个属性列表解析成一个包含属性数据的数组,并尝试做正确的事情,即使它得到奇怪的输入。它将在属性值周围添加引号,这些属性值周围没有任何引号或撇号,以便更容易地生成符合W3C的HTML规范的HTML代码。它还将从属性值中删除错误的URL协议。它还通过使用首先定义的属性(foo='bar'foo='baz'将导致foo='bar'),减少重复属性。
参数 | 类型 | 说明 |
$attr |
(string) |
从HTML元素到结束HTML元素标记的属性列表。 |
$allowed_protocols |
(string[]) |
允许的URL协议数组。 |
/**
* Builds an attribute list from string containing attributes.
*
* This function does a lot of work. It parses an attribute list into an array
* with attribute data, and tries to do the right thing even if it gets weird
* input. It will add quotes around attribute values that don't have any quotes
* or apostrophes around them, to make it easier to produce HTML code that will
* conform to W3C's HTML specification. It will also remove bad URL protocols
* from attribute values. It also reduces duplicate attributes by using the
* attribute defined first (foo='bar' foo='baz' will result in foo='bar').
*
* @since 1.0.0
*
* @param string $attr Attribute list from HTML element to closing HTML element tag
* @param array $allowed_protocols Allowed protocols to keep
* @return array List of attributes after parsing
*/
function wp_kses_hair($attr, $allowed_protocols) {
$attrarr = array();
$mode = 0;
$attrname = '';
$uris = array('xmlns', 'profile', 'href', 'src', 'cite', 'classid', 'codebase', 'data', 'usemap', 'longdesc', 'action');
// Loop through the whole attribute list
while (strlen($attr) != 0) {
$working = 0; // Was the last operation successful?
switch ($mode) {
case 0 : // attribute name, href for instance
if ( preg_match('/^([-a-zA-Z:]+)/', $attr, $match ) ) {
$attrname = $match[1];
$working = $mode = 1;
$attr = preg_replace( '/^[-a-zA-Z:]+/', '', $attr );
}
break;
case 1 : // equals sign or valueless ("selected")
if (preg_match('/^s*=s*/', $attr)) // equals sign
{
$working = 1;
$mode = 2;
$attr = preg_replace('/^s*=s*/', '', $attr);
break;
}
if (preg_match('/^s+/', $attr)) // valueless
{
$working = 1;
$mode = 0;
if(false === array_key_exists($attrname, $attrarr)) {
$attrarr[$attrname] = array ('name' => $attrname, 'value' => '', 'whole' => $attrname, 'vless' => 'y');
}
$attr = preg_replace('/^s+/', '', $attr);
}
break;
case 2 : // attribute value, a URL after href= for instance
if (preg_match('%^"([^"]*)"(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');
}
$working = 1;
$mode = 0;
$attr = preg_replace('/^"[^"]*"(s+|$)/', '', $attr);
break;
}
if (preg_match("%^'([^']*)'(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');
}
$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;
}
更新版本 |
源码位置 |
使用 |
被使用 |
1.0.0 |
wp-includes/kses.php |
18 |
12 |
absint( mixed $maybeint )将值转换为非负整数,也就是取绝对值。Convert a value to non-negative integer.目录锚点:#参数#返回#源码#笔记参数(Parameters)参数类型必填说明$maybeint(mixed)必需要转换为非负整数的数据。返回(Return)(int)非负整数。源码(Source)function absint( $maybeint ) { return abs( intval( $maybeint ) );}/** *...
日期:2020-06-23 10:35:32
浏览:1279
activate_plugin( string $plugin, string $redirect = '', bool $network_wide = false, bool $silent = false )尝试激活插件,并在成功时重定向。Attempts activation of plugin in a “sandbox” and redirects on success.目录锚点:#说明#参数#返回#源码#笔记说明(Description)已激活的插件将不会再次尝试激活。其工作方式是在尝试包含插件...
日期:2020-06-23 10:39:26
浏览:1021
activate_plugins( string|string[] $plugins, string $redirect = '', bool $network_wide = false, bool $silent = false )激活多个插件。Activate multiple plugins.目录锚点:#说明#参数#返回#源码说明(Description)当WP_Error返回时,并不意...
日期:2020-09-08 17:28:27
浏览:1077
activate_sitewide_plugin()不推荐用于激活仅网络插件的功能。Deprecated functionality for activating a network-only plugin.目录锚点:#说明#返回#源码说明(Description)另见激活插件()返回(Return)无返回值源码(Source)更新版本源码位置使用被使用3.0.0 wp-admin/includes/ms-deprecated.php:5701 function...
日期:2020-09-08 17:28:28
浏览:1870
addslashes_gpc( string $gpc )添加斜线以转义字符串。Adds slashes to escape strings.目录锚点:#说明#参数#返回#源码说明(Description)如果设置了magic_quotes_gpc,将首先删除斜线,请参见https://www.php.net/magic_quotes更多细节。参数(Parameters)参数类型必填说明 $gpc (string) ...
日期:2020-09-21 12:46:52
浏览:916
addslashes_strings_only( mixed $value )仅当提供的值是字符串时才添加斜杠。Adds slashes only if the provided value is a string.目录锚点:#参数#返回#源码参数(Parameters)参数类型必填说明 $value (mixed) 必需 返回(Return)(mixe...
日期:2020-09-24 15:58:41
浏览:1305
add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )将函数挂接到特定操作上。Hooks a function on to a specific action.目录锚点:#说明#参数#返回#源码#笔记说明(Description)Actions是WordPress核心在执行期间...
日期:2020-09-08 17:28:28
浏览:1169
add_blog_option( int $id, string $option, mixed $value )为给定的博客id添加新选项。Add a new option for a given blog id.目录锚点:#说明#参数#返回#源码#笔记说明(Description)不需要序列化值。如果需要序列化该值,则在将其插入数据库之前将对其进行序列化。请记住,资源不能序列化或作为选项添加。可以创建不带值的选项,然后稍后更新这些值。现有选项将不会更新,并执行检...
日期:2020-08-26 10:53:23
浏览:982
add_clean_index( string $table, string $index )向指定表添加索引。Adds an index to a specified table.目录锚点:#参数#返回#源码#笔记参数(Parameters)参数类型必填说明 $table (string) 必需 数据库表名。 ...
日期:2020-09-08 17:28:29
浏览:976
add_comments_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = '', int $position = null )将子菜单页添加到“注释”主菜单。Add submenu page to the Comments ma...
日期:2020-08-24 11:14:39
浏览:1038