diff --git a/core/lib/Drupal/Component/Utility/SafeMarkup.php b/core/lib/Drupal/Component/Utility/SafeMarkup.php
index 69d12fe..f3f08dc 100644
--- a/core/lib/Drupal/Component/Utility/SafeMarkup.php
+++ b/core/lib/Drupal/Component/Utility/SafeMarkup.php
@@ -75,7 +75,9 @@ class SafeMarkup {
    */
   public static function set($string, $strategy = 'html') {
     $string = (string) $string;
-    static::$safeStrings[$string][$strategy] = TRUE;
+    // Raw output of sha512 is 64 bytes, so hash any string longer than 63.
+    $key = strlen($string) > 63 ? hash('sha512', $string, TRUE) : $string;
+    static::$safeStrings[$key][$strategy] = TRUE;
     return $string;
   }
 
@@ -91,8 +93,11 @@ public static function set($string, $strategy = 'html') {
    *   TRUE if the string has been marked secure, FALSE otherwise.
    */
   public static function isSafe($string, $strategy = 'html') {
-    return isset(static::$safeStrings[(string) $string][$strategy]) ||
-      isset(static::$safeStrings[(string) $string]['all']);
+    $string = (string) $string;
+    // Raw output of sha512 is 64 bytes, so hash any string longer than 63.
+    $key = strlen($string) > 63 ? hash('sha512', $string, TRUE) : $string;
+    return isset(static::$safeStrings[$key][$strategy]) ||
+      isset(static::$safeStrings[$key]['all']);
   }
 
   /**
@@ -112,7 +117,9 @@ public static function setMultiple(array $safe_strings) {
       foreach ($strategies as $strategy => $value) {
         $string = (string) $string;
         if ($value === TRUE) {
-          static::$safeStrings[$string][$strategy] = TRUE;
+          // Output of sha512 is 64 bytes, so hash any string longer than 63.
+          $key = strlen($string) > 63 ? hash('sha512', $string, TRUE) : $string;
+          static::$safeStrings[$key][$strategy] = TRUE;
         }
         else {
           // Danger - something is very wrong.
@@ -184,7 +191,9 @@ public static function getAll() {
    */
   public static function checkPlain($text) {
     $string = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
-    static::$safeStrings[$string]['html'] = TRUE;
+    // Raw output of sha512 is 64 bytes, so hash any string longer than 63.
+    $key = strlen($string) > 63 ? hash('sha512', $string, TRUE) : $string;
+    static::$safeStrings[$key]['html'] = TRUE;
     return $string;
   }
 
@@ -259,7 +268,9 @@ public static function format($string, array $args = array()) {
 
     $output = strtr($string, $args);
     if ($safe) {
-      static::$safeStrings[$output]['html'] = TRUE;
+      // Raw output of sha512 is 64 bytes, so hash any string longer than 63.
+      $key = strlen($output) > 63 ? hash('sha512', $output, TRUE) : $output;
+      static::$safeStrings[$key]['html'] = TRUE;
     }
 
     return $output;
@@ -278,7 +289,9 @@ public static function format($string, array $args = array()) {
    */
   public static function placeholder($text) {
     $string = '<em class="placeholder">' . static::escape($text) . '</em>';
-    static::$safeStrings[$string]['html'] = TRUE;
+    // Raw output of sha512 is 64 bytes, so hash any string longer than 63.
+    $key = strlen($string) > 63 ? hash('sha512', $string, TRUE) : $string;
+    static::$safeStrings[$key]['html'] = TRUE;
     return $string;
   }
 
