PhpTransliteration::removeDiacritics

public PhpTransliteration::removeDiacritics($string)

Removes diacritics (accents) from certain letters.

This only applies to certain letters: Accented Latin characters like a-with-acute-accent, in the UTF-8 character range of 0xE0 to 0xE6 and 01CD to 024F. Replacements that would result in the string changing length are excluded, as well as characters that are not accented US-ASCII letters.

Parameters

string $string: The string holding diacritics.

Return value

string $string with accented letters replaced by their unaccented equivalents.

Overrides TransliterationInterface::removeDiacritics

File

core/lib/Drupal/Component/Transliteration/PhpTransliteration.php, line 76

Class

PhpTransliteration
Implements transliteration without using the PECL extensions.

Namespace

Drupal\Component\Transliteration

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public function removeDiacritics($string) {
  $result = '';
 
  foreach (preg_split('//u', $string, 0, PREG_SPLIT_NO_EMPTY) as $character) {
    $code = self::ordUTF8($character);
 
    // These two Unicode ranges include the accented US-ASCII letters, with a
    // few characters that aren't accented letters mixed in. So define the
    // ranges and the excluded characters.
    $range1 = $code > 0x00bf && $code < 0x017f;
    $exclusions_range1 = array(0x00d0, 0x00d7, 0x00f0, 0x00f7, 0x0138, 0x014a, 0x014b);
    $range2 = $code > 0x01cc && $code < 0x0250;
    $exclusions_range2 = array(0x01DD, 0x01f7, 0x021c, 0x021d, 0x0220, 0x0221, 0x0241, 0x0242, 0x0245);
 
    $replacement = $character;
    if (($range1 && !in_array($code, $exclusions_range1)) || ($range2 && !in_array($code, $exclusions_range2))) {
      $to_add = $this->lookupReplacement($code, 'xyz');
      if (strlen($to_add) === 1) {
        $replacement = $to_add;
      }
    }
 
    $result .= $replacement;
  }
 
  return $result;
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.