diff --git a/core/includes/unicode.inc b/core/includes/unicode.inc
index 56ffd76..66f4184 100644
--- a/core/includes/unicode.inc
+++ b/core/includes/unicode.inc
@@ -50,6 +50,17 @@ function unicode_requirements() {
     case 'mbstring.http_output':
       $requirements['unicode']['description'] = t('Multibyte string output conversion in PHP is active and must be disabled. Check the php.ini <em>mbstring.http_output</em> setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', $t_args);
       break;
+
+    case 'input_encoding':
+    case 'output_encoding':
+    case 'internal_encoding':
+      $requirements['unicode']['description'] = t('The input_encoding, output_encoding and internal_encoding PHP settings must be set to UTF-8 or be disabled. Check the php.ini setting. Please refer to the <a href="@url">PHP mbstring documentation</a> for more information.', ['@url' => 'https://www.php.net/manual/en/iconv.configuration.php']);
+      break;
+
+    case 'iconv.output_encoding':
+    case 'iconv.internal_encoding':
+      $requirements['unicode']['description'] = t('The iconv.output_encoding and iconv.internal_encoding PHP settings must be set to UTF-8 or be disabled. Check the php.ini setting.');
+      break;
   }
 
   return $requirements;
diff --git a/core/lib/Drupal/Component/Utility/Unicode.php b/core/lib/Drupal/Component/Utility/Unicode.php
index 4938b0d..096a920 100644
--- a/core/lib/Drupal/Component/Utility/Unicode.php
+++ b/core/lib/Drupal/Component/Utility/Unicode.php
@@ -164,15 +164,28 @@ public static function check() {
       return 'mbstring.encoding_translation';
     }
     // mbstring.http_input and mbstring.http_output are deprecated and empty by
-    // default in PHP 5.6.
-    if (version_compare(PHP_VERSION, '5.6.0') == -1) {
-      if (ini_get('mbstring.http_input') != 'pass') {
+    // default in PHP 5.6, so the ini_get will return an empty value. On earlier
+    // versions, these must be set to 'pass'.
+    // No need to check for mbstring.internal_encoding as we set it to UTF-8
+    // ourselves later on in this method.
+    $settings_pass = ['mbstring.http_input', 'mbstring.http_output'];
+    foreach ($settings_pass as $setting_pass) {
+      $setting_pass_value = ini_get($setting_pass);
+      if (!empty($setting_pass_value) || $setting_pass_value != 'pass') {
         static::$status = static::STATUS_ERROR;
-        return 'mbstring.http_input';
+        return $setting_pass;
       }
-      if (ini_get('mbstring.http_output') != 'pass') {
+    }
+    // Newly introduced variables in PHP 5.6. Must be either empty or set to
+    // UTF-8.
+    $settings_utf8 = ['internal_encoding', 'input_encoding', 'output_encoding'];
+    // These must be set to UTF-8 or empty as they are deprecated as of PHP 5.6:
+    $settings_utf8 += ['iconv.internal_encoding', 'iconv.output_encoding'];
+    foreach ($settings_utf8 as $setting_utf8) {
+      $setting_utf8_value = strtolower(ini_get($setting_utf8));
+      if (!empty($setting_utf8_value) || $setting_utf8_value != 'utf-8') {
         static::$status = static::STATUS_ERROR;
-        return 'mbstring.http_output';
+        return $setting_utf8;
       }
     }
 
