You are here

private function FilterOnomasticon::html_entities_normalize_xml in Onomasticon 2.x

Same name and namespace in other branches
  1. 8 src/Plugin/Filter/FilterOnomasticon.php \Drupal\onomasticon\Plugin\Filter\FilterOnomasticon::html_entities_normalize_xml()

Unicode-proof htmlentities function. Returns 'normal' chars as chars and special characters as numeric html entities.

Parameters

string $string:

Return value

string

1 call to FilterOnomasticon::html_entities_normalize_xml()
FilterOnomasticon::process in src/Plugin/Filter/FilterOnomasticon.php
Main filter function as expected by Drupal.

File

src/Plugin/Filter/FilterOnomasticon.php, line 139

Class

FilterOnomasticon
Plugin annotation @Filter( id = "filter_onomasticon", title = @Translation("Onomasticon Filter"), description = @Translation("Adds glossary information to words."), type = Drupal\filter\Plugin\FilterInterface::TYPE_MARKUP_LANGUAGE, settings…

Namespace

Drupal\onomasticon\Plugin\Filter

Code

private function html_entities_normalize_xml($string) {

  // Get rid of existing entities and double-escape.
  $string = html_entity_decode(stripslashes($string), ENT_QUOTES, 'UTF-8');
  $result = '';

  // Create array of multi-byte characters.
  $ar = preg_split('/(?<!^)(?!$)/u', $string);
  foreach ($ar as $c) {
    $o = ord($c);
    if (strlen($c) > 1 || ($o < 32 || $o > 126) || $o == 38) {

      // Convert to numeric entity.
      $c = mb_encode_numericentity($c, array(
        0x0,
        0xffff,
        0,
        0xffff,
      ), 'UTF-8');
    }
    $result .= $c;
  }

  // Mask ampersands
  $result = str_replace('&#38;', '###amp###', $result);
  $result = html_entity_decode($result, ENT_HTML5);
  $result = str_replace('###amp###', '&#38;', $result);
  return $result;
}