protected static function Xss::split

Processes an HTML tag.

Parameters

array $matches: An array with various meaning depending on the value of $store. If $store is TRUE then the array contains the allowed tags. If $store is FALSE then the array has one element, the HTML tag to process.

bool $store: Whether to store $m.

Return value

string If the element isn't allowed, an empty string. Otherwise, the cleaned up version of the HTML element.

1 call to Xss::split()
Xss::filter in drupal/core/lib/Drupal/Component/Utility/Xss.php
Filters HTML to prevent cross-site-scripting (XSS) vulnerabilities.

File

drupal/core/lib/Drupal/Component/Utility/Xss.php, line 120
Contains \Drupal\Component\Utility\Xss.

Class

Xss
Provides helper to filter for cross-site scripting.

Namespace

Drupal\Component\Utility

Code

protected static function split($matches, $store = FALSE) {
  static $allowed_html;
  if ($store) {
    $allowed_html = array_flip($matches);
    return;
  }
  $string = $matches[1];
  if (substr($string, 0, 1) != '<') {

    // We matched a lone ">" character.
    return '&gt;';
  }
  elseif (strlen($string) == 1) {

    // We matched a lone "<" character.
    return '&lt;';
  }
  if (!preg_match('%^<\\s*(/\\s*)?([a-zA-Z0-9]+)([^>]*)>?|(<!--.*?-->)$%', $string, $matches)) {

    // Seriously malformed.
    return '';
  }
  $slash = trim($matches[1]);
  $elem =& $matches[2];
  $attrlist =& $matches[3];
  $comment =& $matches[4];
  if ($comment) {
    $elem = '!--';
  }
  if (!isset($allowed_html[strtolower($elem)])) {

    // Disallowed HTML element.
    return '';
  }
  if ($comment) {
    return $comment;
  }
  if ($slash != '') {
    return "</{$elem}>";
  }

  // Is there a closing XHTML slash at the end of the attributes?
  $attrlist = preg_replace('%(\\s?)/\\s*$%', '\\1', $attrlist, -1, $count);
  $xhtml_slash = $count ? ' /' : '';

  // Clean up attributes.
  $attr2 = implode(' ', static::attributes($attrlist));
  $attr2 = preg_replace('/[<>]/', '', $attr2);
  $attr2 = strlen($attr2) ? ' ' . $attr2 : '';
  return "<{$elem}{$attr2}{$xhtml_slash}>";
}