-
🦎 @bdavidLa fonction précédente ne transforme pas correctement les digrammes (œ -> o au lieu de -> oe), voici la bonne solution :
<?php function to_canonical_name ($original_name, $lower_case=false, $new_char='-', $replaced_characters=[' ', '\'']) { $transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', \Transliterator::FORWARD); $canonical_name = $transliterator->transliterate($original_name); if ($lower_case) $canonical_name = mb_strtolower($canonical_name); // supprimer d'éventuels espaces avant et après $canonical_name = trim($canonical_name); if ($replaced_characters) // étape 4, remplacer les espaces par des tirets $canonical_name = str_replace($replaced_characters, $new_char, $canonical_name); return $canonical_name; } $test = array('abcd', 'èe', '€', 'àòùìéëü', 'àòùìéëü', 'tiësto', 'Marœuil', 'St Georges d\'Espéranche'); foreach($test as $e) { $normalized = to_canonical_name($e, true); echo $e. ' --> '.$normalized."<br>"; } echo 'La Petite Forêt --> ' . to_canonical_name('La Petite Forêt', true, '+');
On pourra ainsi inhiber une étape dont on n'a pas besoin : conversion en minuscule ou remplacement des espaces par des tirets par exemple !
Edited by Bertrand DAVID-JACQUOT -
🦎 @bdavidpour la recherche dans certaine API, comme https://adresse.data.gouv.fr/api-doc/adresse, il peut-être utile de remplacer les espaces par des + :
La Petite Forêt
->la+petite+foret
Please register or sign in to comment