_wp_utf8_codepoint_span()WP 6.9.0

Given a starting offset within a string and a maximum number of code points, return how many bytes are occupied by the span of characters.

Invalid spans of bytes count as a single code point according to the maximal subpart rule. This function is a fallback method for calling strlen( mb_substr( substr($text,$at), 0,$max_code_points) ).

Internal function — this function is designed to be used by the kernel itself. It is not recommended to use this function in your code.

No Hooks.

Returns

Int. Number of bytes spanned by the code points.

Usage

_wp_utf8_codepoint_span( $text, $byte_offset, $max_code_points, ?int $found_code_points ): int;
$text(string) (required)
Count bytes of span in this text.
$byte_offset(int) (required)
Start counting at this byte offset.
$max_code_points(int) (required)
Stop counting after this many code points have been seen, or at the end of the string.
?int $found_code_points(passed by reference — &)
.

Changelog

Since 6.9.0 Introduced.

_wp_utf8_codepoint_span() code WP 7.0

function _wp_utf8_codepoint_span( string $text, int $byte_offset, int $max_code_points, ?int &$found_code_points = 0 ): int {
	$was_at            = $byte_offset;
	$invalid_length    = 0;
	$end               = strlen( $text );
	$found_code_points = 0;

	while ( $byte_offset < $end && $found_code_points < $max_code_points ) {
		$needed      = $max_code_points - $found_code_points;
		$chunk_count = _wp_scan_utf8( $text, $byte_offset, $invalid_length, null, $needed );

		$found_code_points += $chunk_count;

		// Invalid spans only convey one code point count regardless of how long they are.
		if ( 0 !== $invalid_length && $found_code_points < $max_code_points ) {
			++$found_code_points;
			$byte_offset += $invalid_length;
		}
	}

	return $byte_offset - $was_at;
}