Html::cleanCssIdentifier

public static Html::cleanCssIdentifier($identifier, array $filter = array(
  ' ' => '-',
  '_' => '-',
  '/' => '-',
  '[' => '-',
  ']' => '',
))

Prepares a string for use as a CSS identifier (element, class, or ID name).

http://www.w3.org/TR/CSS21/syndata.html#characters shows the syntax for valid CSS identifiers (including element names, classes, and IDs in selectors.)

Parameters

string $identifier: The identifier to clean.

array $filter: An array of string replacements to use on the identifier.

Return value

string The cleaned identifier.

File

core/lib/Drupal/Component/Utility/Html.php, line 92

Class

Html
Provides DOMDocument helpers for parsing and serializing HTML strings.

Namespace

Drupal\Component\Utility

Code

public static function cleanCssIdentifier($identifier, array $filter = array(
  ' ' => '-',
  '_' => '-',
  '/' => '-',
  '[' => '-',
  ']' => '',
)) {
  // We could also use strtr() here but its much slower than str_replace(). In
  // order to keep '__' to stay '__' we first replace it with a different
  // placeholder after checking that it is not defined as a filter.
  $double_underscore_replacements = 0;
  if (!isset($filter['__'])) {
    $identifier = str_replace('__', '##', $identifier, $double_underscore_replacements);
  }
  $identifier = str_replace(array_keys($filter), array_values($filter), $identifier);
  // Replace temporary placeholder '##' with '__' only if the original
  // $identifier contained '__'.
  if ($double_underscore_replacements > 0) {
    $identifier = str_replace('##', '__', $identifier);
  }

  // Valid characters in a CSS identifier are:
  // - the hyphen (U+002D)
  // - a-z (U+0030 - U+0039)
  // - A-Z (U+0041 - U+005A)
  // - the underscore (U+005F)
  // - 0-9 (U+0061 - U+007A)
  // - ISO 10646 characters U+00A1 and higher
  // We strip out any character not in the above list.
  $identifier = preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $identifier);
  // Identifiers cannot start with a digit, two hyphens, or a hyphen followed by a digit.
  $identifier = preg_replace(array(
    '/^[0-9]/',
    '/^(-[0-9])|^(--)/'
  ), array('_', '__'), $identifier);
  return $identifier;
}
doc_Drupal
2016-10-29 09:18:43
Comments
Leave a Comment

Please login to continue.