_wp_utf8_codepoint_span( string $text, int $byte_offset, int $max_code_points, ?int $found_code_points ): int

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only by core. It is listed here for completeness.

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.

Description

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 ) ).

Parameters

$textstringrequired
Count bytes of span in this text.
$byte_offsetintrequired
Start counting at this byte offset.
$max_code_pointsintrequired
Stop counting after this many code points have been seen, or at the end of the string.
$found_code_points?intoptional
Will be set to number of found code points in span, as this might be smaller than the maximum count if the string is not long enough.

Return

int Number of bytes spanned by the code points.

Source

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;
}

Changelog

VersionDescription
6.9.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.