WordPress Version: 6.2
/**
* Checks for invalid UTF8 in a string.
*
* @since 2.8.0
*
* @param string $text The text which is to be checked.
* @param bool $strip Optional. Whether to attempt to strip out invalid UTF8. Default false.
* @return string The checked text.
*/
function wp_check_invalid_utf8($text, $strip = false)
{
$text = (string) $text;
if (0 === strlen($text)) {
return '';
}
// Store the site charset as a static to avoid multiple calls to get_option().
static $is_utf8 = null;
if (!isset($is_utf8)) {
$is_utf8 = in_array(get_option('blog_charset'), array('utf8', 'utf-8', 'UTF8', 'UTF-8'), true);
}
if (!$is_utf8) {
return $text;
}
// Check for support for utf8 in the installed PCRE library once and store the result in a static.
static $utf8_pcre = null;
if (!isset($utf8_pcre)) {
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
$utf8_pcre = @preg_match('/^./u', 'a');
}
// We can't demand utf8 in the PCRE installation, so just return the string in those cases.
if (!$utf8_pcre) {
return $text;
}
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- preg_match fails when it encounters invalid UTF8 in $text.
if (1 === @preg_match('/^./us', $text)) {
return $text;
}
// Attempt to strip the bad chars if requested (not recommended).
if ($strip && function_exists('iconv')) {
return iconv('utf-8', 'utf-8', $text);
}
return '';
}