Skip to content
  • La 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
  • pour 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

0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment