diff -u b/core/modules/node/node.tokens.inc b/core/modules/node/node.tokens.inc --- b/core/modules/node/node.tokens.inc +++ b/core/modules/node/node.tokens.inc @@ -152,7 +152,10 @@ $length = $settings['trim_length']; } - $output = text_summary($output, $item->format, $length); + // Cast to string, because "processed" returns a + // \Drupal\Component\Render\MarkupInterface via check_markup() + // and all unicode utilities expects string input. + $output = text_summary((string) $output, $item->format, $length); } } // "processed" returns a \Drupal\Component\Render\MarkupInterface diff -u b/core/modules/node/tests/src/Kernel/NodeTokenReplaceTest.php b/core/modules/node/tests/src/Kernel/NodeTokenReplaceTest.php --- b/core/modules/node/tests/src/Kernel/NodeTokenReplaceTest.php +++ b/core/modules/node/tests/src/Kernel/NodeTokenReplaceTest.php @@ -142,8 +142,8 @@ // Get teaser node view display. $view_display = \Drupal::entityTypeManager() - ->getStorage('entity_view_display') - ->load('node.article.teaser'); + ->getStorage('entity_view_display') + ->load('node.article.teaser'); if (!$view_display) { $values = [ 'targetEntityType' => 'node', @@ -152,8 +152,8 @@ 'status' => TRUE, ]; $view_display = \Drupal::entityTypeManager() - ->getStorage('entity_view_display') - ->create($values); + ->getStorage('entity_view_display') + ->create($values); } // Token [node:summary] should use trim settings of "Summary or trimmed"