WP_HTML_Decoder::attribute_starts_with()
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: or as http: or as http:, or in many other ways.
Example:
$value = 'http://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' );
Method of the class: WP_HTML_Decoder{}
No Hooks.
Return
true|false
. Whether the attribute value starts with the given string.
Usage
$result = WP_HTML_Decoder::attribute_starts_with( $haystack, $search_text, $case_sensitivity );
- $haystack(string) (required)
- String containing the raw non-decoded attribute value.
- $search_text(string) (required)
- Does the attribute value start with this plain string.
- $case_sensitivity(string)
- Pass 'ascii-case-insensitive' to ignore ASCII case when matching.
Default: 'case-sensitive'
Changelog
Since 6.6.0 | Introduced. |
WP_HTML_Decoder::attribute_starts_with() WP HTML Decoder::attribute starts with code WP 6.6.2
public static function attribute_starts_with( $haystack, $search_text, $case_sensitivity = 'case-sensitive' ) { $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; }