wppaste
WordPress

WP_HTML_Decoder

Since
6.6.0
Source
wp-includes/html-api/class-wp-html-decoder.php:12
HTML API: WP_HTML_Decoder class

Description

Decodes spans of raw text found inside HTML content.

Compatibility

WordPress
since 6.6.0
  • 6.7.10
  • 6.8.11
  • 6.9.10
  • 7.0.7
  • 7.1.3

Present in every tracked release (6.7.10 to 7.1.3).

Methods · 6

Source code

class WP_HTML_Decoder {	/**	 * Indicates if an attribute value starts with a given raw string value.	 *	 * Use this method to determine if an attribute value starts with a given string, regardless	 * of how it might be encoded in HTML. For instance, `http:` could be represented as `http:`	 * or as `http&colon;` or as `&#x68;ttp:` or as `h&#116;tp&colon;`, or in many other ways.	 *	 * Example:	 *	 *     $value = 'http&colon;//wordpress.org/';	 *     true   === WP_HTML_Decoder::attribute_starts_with( $value, 'http:', 'ascii-case-insensitive' );	 *     false  === WP_HTML_Decoder::attribute_starts_with( $value, 'https:', 'ascii-case-insensitive' );	 *	 * @since 6.6.0	 *	 * @param string $haystack         String containing the raw non-decoded attribute value.	 * @param string $search_text      Does the attribute value start with this plain string.	 * @param string $case_sensitivity Optional. Pass 'ascii-case-insensitive' to ignore ASCII case when matching.	 *                                 Default 'case-sensitive'.	 * @return bool Whether the attribute value starts with the given string.	 */	public static function attribute_starts_with( $haystack, $search_text, $case_sensitivity = 'case-sensitive' ): bool {		$search_length = strlen( $search_text );		$loose_case    = 'ascii-case-insensitive' === $case_sensitivity;		$haystack_end  = strlen( $haystack );		$search_at     = 0;		$haystack_at   = 0; 		while ( $search_at < $search_length && $haystack_at < $haystack_end ) {			$chars_match = $loose_case				? strtolower( $haystack[ $haystack_at ] ) === strtolower( $search_text[ $search_at ] )				: $haystack[ $haystack_at ] === $search_text[ $search_at ]; 			$is_introducer = '&' === $haystack[ $haystack_at ];			$next_chunk    = $is_introducer				? self::read_character_reference( 'attribute', $haystack, $haystack_at, $token_length )				: null; 			// If there's no character reference and the characters don't match, the match fails.			if ( null === $next_chunk && ! $chars_match ) {				return false;			} 			// If there's no character reference but the character do match, then it could still match.			if ( null === $next_chunk && $chars_match ) {				++$haystack_at;				++$search_at;				continue;			} 			// If there is a character reference, then the decoded value must exactly match what follows in the search string.			if ( 0 !== substr_compare( $search_text, $next_chunk, $search_at, strlen( $next_chunk ), $loose_case ) ) {				return false;			} 			// The character reference matched, so continue checking.			$haystack_at += $token_length;			$search_at   += strlen( $next_chunk );		} 		return true;	} 	/**	 * Returns a string containing the decoded value of a given HTML text node.	 *	 * Text nodes appear in HTML DATA sections, which are the text segments inside	 * and around tags, excepting SCRIPT and STYLE elements (and some others),	 * whose inner text is not decoded. Use this function to read the decoded	 * value of such a text span in an HTML document.	 *	 * Example:	 *	 *     '“😄”' === WP_HTML_Decode::decode_text_node( '&#x93;&#x1f604;&#x94' );	 *	 * @since 6.6.0	 *	 * @param string $text Text containing raw and non-decoded text node to decode.	 * @return string Decoded UTF-8 value of given text node.

Changelog

Introduced in 6.6.0. Unchanged from 6.7.10 through 7.1.3.

  1. 6.7.10
  2. 6.8.11
  3. 6.9.10
  4. 7.0.7
  5. 7.1.3

Signature, return type and hooks compared across 5 parsed releases.

About this page

Parsed data
Generated from the wordpress-develop 6.8.11 tag, from src/wp-includes/html-api/class-wp-html-decoder.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.
Corrections
Something wrong on this page? Report it and it gets fixed in the next regeneration.