wp-includes/compat.php:294Internal compat function to mimic mb_substr().
$strstring$startint$lengthint|nulloptionalnull$encodingstring|nulloptionalnullstringfunction _mb_substr( $str, $start, $length = null, $encoding = null ) { if ( null === $str ) { return ''; } // The solution below works only for UTF-8; treat all other encodings as byte streams. if ( ! _is_utf8_charset( $encoding ?? get_option( 'blog_charset' ) ) ) { $result = is_null( $length ) ? substr( $str, $start ) : substr( $str, $start, $length ); /* * For an out-of-range start, substr() returns false on PHP < 8.0 but an * empty string on PHP >= 8.0. mb_substr() always returns an empty string, * so normalize to match its behavior across all supported PHP versions. */ return false === $result ? '' : $result; } $total_length = ( $start < 0 || $length < 0 ) ? _wp_utf8_codepoint_count( $str ) : 0; $normalized_start = $start < 0 ? max( 0, $total_length + $start ) : $start; /* * The starting offset is provided as characters, which means this needs to * find how many bytes that many characters occupies at the start of the string. */ $starting_byte_offset = _wp_utf8_codepoint_span( $str, 0, $normalized_start ); $normalized_length = $length < 0 ? max( 0, $total_length - $normalized_start + $length ) : $length; /* * This is the main step. It finds how many bytes the given length of code points * occupies in the input, starting at the byte offset calculated above. */ $byte_length = isset( $normalized_length ) ? _wp_utf8_codepoint_span( $str, $starting_byte_offset, $normalized_length ) : ( strlen( $str ) - $starting_byte_offset ); // The result is a normal byte-level substring using the computed ranges. return substr( $str, $starting_byte_offset, $byte_length );}Introduced in 3.2.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/compat.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.