diff --git a/core/modules/views/src/Tests/FieldApiDataTest.php b/core/modules/views/src/Tests/FieldApiDataTest.php
index 96ff642..fbfdf00 100644
--- a/core/modules/views/src/Tests/FieldApiDataTest.php
+++ b/core/modules/views/src/Tests/FieldApiDataTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\views\Tests;
 
+use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Tests\Views\FieldTestBase;
 
 /**
@@ -26,9 +27,20 @@ protected function setUp() {
       'field_name' => $field_names[0],
       'entity_type' => 'node',
       'bundle' => 'page',
+      'label' => 'The giraffe" label'
     );
     entity_create('field_config', $field)->save();
 
+    // Attach the same field to a different bundle with a different label.
+    $this->drupalCreateContentType(['type' => 'article']);
+    $field = FieldConfig::create([
+      'field_name' => $field_names[0],
+      'entity_type' => 'node',
+      'bundle' => 'article',
+      'label' => 'The giraffe2" label'
+    ]);
+    $field->save();
+
     // Now create some example nodes/users for the view result.
     for ($i = 0; $i < 5; $i++) {
       $edit = array(
@@ -86,6 +98,7 @@ function testViewsData() {
     $this->assertTrue($data[$current_table][$field_storage->getName()]['field']['click sortable'], 'String field is click sortable.');
     // Click sort should only be on the primary field.
     $this->assertTrue(empty($data[$revision_table][$field_storage->getName()]['field']['click sortable']), 'Non-primary fields are not click sortable');
+    $this->assertEqual($data[$current_table][$field_storage->getName()]['help'], 'Appears in: page, article. Also known as: Content: The giraffe2&quot; label');
   }
 
 }
diff --git a/core/modules/views/views.views.inc b/core/modules/views/views.views.inc
index 9948880..703e004 100644
--- a/core/modules/views/views.views.inc
+++ b/core/modules/views/views.views.inc
@@ -449,7 +449,16 @@ function views_field_default_views_data(FieldStorageConfigInterface $field_stora
     }
     if ($aliases) {
       $data[$table_alias][$field_alias]['aliases'] = $aliases;
-      $data[$table_alias][$field_alias]['help'] .= ' ' . t('Also known as: !also.', array('!also' => implode(', ', $also_known)));
+      // The $also_known variable contains markup that is HTML escaped and that
+      // loses safeness when imploded. The help text is used in #description
+      // and therefore XSS admin filtered by default. Escaped HTML is not
+      // altered by XSS filtering, therefore it is safe to just concatenate the
+      // strings. Ideally the result would also by marked safe so that, if the
+      // string is used in another context it would not be escaped again.
+      // Considering the dual use of this help data (both as metadata and as
+      // help text), other patterns such as use of #markup would not be correct
+      // here.
+      $data[$table_alias][$field_alias]['help'] .= ' ' . t('Also known as:') . ' ' . implode(', ', $also_known);
     }
 
     $keys = array_keys($field_columns);
@@ -550,7 +559,17 @@ function views_field_default_views_data(FieldStorageConfigInterface $field_stora
       }
       if ($aliases) {
         $data[$table_alias][$column_real_name]['aliases'] = $aliases;
-        $data[$table_alias][$column_real_name]['help'] .= ' ' . t('Also known as: !also.', array('!also' => implode(', ', $also_known)));
+        // The $also_known variable contains markup that is HTML escaped and that
+        // loses safeness when imploded. In order to undo the previous escaping,
+        // we perform a htmlspecialchars_decode() and rely on auto-escape to re-
+        // escape the data on output. We do this here because what we are putting
+        // into the help key of the field is schema-like plain-text data that is
+        // not supposed to contain any markup, while t() outputs HTML data by
+        // default. Considering the dual use of this help data (both as metadata
+        // and as help text), other patterns such as use of #markup would not be
+        // correct here.
+        $also_known_list = htmlspecialchars_decode(implode(', ', $also_known), ENT_QUOTES | ENT_SUBSTITUTE);
+        $data[$table_alias][$column_real_name]['help'] .= ' ' . t('Also known as:') . ' ' . $also_known_list;
       }
 
       $data[$table_alias][$column_real_name]['argument'] = array(
diff --git a/core/modules/views_ui/src/Tests/HandlerTest.php b/core/modules/views_ui/src/Tests/HandlerTest.php
index c53ddd7..b2110a3 100644
--- a/core/modules/views_ui/src/Tests/HandlerTest.php
+++ b/core/modules/views_ui/src/Tests/HandlerTest.php
@@ -8,6 +8,8 @@
 namespace Drupal\views_ui\Tests;
 
 use Drupal\Component\Utility\SafeMarkup;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\views\ViewExecutable;
 
 /**
@@ -23,7 +25,7 @@ class HandlerTest extends UITestBase {
    *
    * @var array
    */
-  public static $testViews = array('test_view_empty', 'test_view_broken');
+  public static $testViews = array('test_view_empty', 'test_view_broken', 'node');
 
   /**
    * Overrides \Drupal\views\Tests\ViewTestBase::schemaDefinition().
@@ -138,6 +140,43 @@ public function testUICRUD() {
   }
 
   /**
+   * Tests escaping of field labels in help text.
+   */
+  public function testHandlerHelpEscaping() {
+    // Setup a field with two instances using a different label.
+    // Ensure that the label is escaped properly.
+
+    $this->drupalCreateContentType(['type' => 'article']);
+    $this->drupalCreateContentType(['type' => 'page']);
+
+    $field_storage = FieldStorageConfig::create([
+      'field_name' => 'field_test',
+      'entity_type' => 'node',
+      'type' => 'string',
+    ]);
+    $field_storage->save();
+
+    $field_config = FieldConfig::create([
+      'field_name' => 'field_test',
+      'entity_type' => 'node',
+      'bundle' => 'page',
+      'label' => 'The giraffe" label'
+    ]);
+    $field_config->save();
+
+    $field_config = FieldConfig::create([
+      'field_name' => 'field_test',
+      'entity_type' => 'node',
+      'bundle' => 'article',
+      'label' => 'The <em>giraffe"</em> label <script>alert("the return of the xss")</script>'
+    ]);
+    $field_config->save();
+
+    $this->drupalGet('admin/structure/views/nojs/add-handler/content/default/field');
+    $this->assertEscaped('Appears in: page, article. Also known as: Content: The <em>giraffe"</em> label <script>alert("the return of the xss")</script>');
+  }
+
+  /**
    * Tests broken handlers.
    */
   public function testBrokenHandlers() {
