wp_kses_hair_parse() – Builds an attribute list from string containing attributes.

You appear to be a bot. Output may be restricted

Description

Builds an attribute list from string containing attributes.

Does not modify input. May return "evil" output. In case of unexpected input, returns false instead of stripping things. Based on wp_kses_hair() but does not return a multi-dimensional array.

Usage

$array|false = wp_kses_hair_parse( $attr );

Parameters

$attr
( string ) required – Attribute list from HTML element to closing HTML element tag.

Returns

array|false List of attributes found in $attr. Returns false on failure.

Source

File name: wordpress/wp-includes/kses.php


Lines:

1 to 44 of 44
function wp_kses_hair_parse( $attr ) {
  if ( '' === $attr ) {
    return array();
  }

  // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
  $regex =
    '(?:'
    .     '[_a-zA-Z][-_a-zA-Z0-9:.]*' // Attribute name.
    . '|'
    .     '\[\[?[^\[\]]+\]\]?'        // Shortcode in the name position implies unfiltered_html.
    . ')'
    . '(?:'               // Attribute value.
    .     '\s*=\s*'       // All values begin with '='.
    .     '(?:'
    .         '"[^"]*"'   // Double-quoted.
    .     '|'
    .         "'[^']*'"   // Single-quoted.
    .     '|'
    .         '[^\s"\']+' // Non-quoted.
    .         '(?:\s|$)'  // Must have a space.
    .     ')'
    . '|'
    .     '(?:\s|$)'      // If attribute has no value, space is required.
    . ')'
    . '\s*';              // Trailing space is optional except as mentioned above.
  // phpcs:enable

  /*
	 * Although it is possible to reduce this procedure to a single regexp,
	 * we must run that regexp twice to get exactly the expected result.
	 */

  $validation = "%^($regex)+$%";
  $extraction = "%$regex%";

  if ( 1 === preg_match( $validation, $attr ) ) {
    preg_match_all( $extraction, $attr, $attrarr );
    return $attrarr[0];
  } else {
    return false;
  }
}
 

 View on GitHub View on Trac