Možným řešením by bylo vytvoření dalšího sloupce v databázi vedle "artist", jako "artist_normalized". Zde můžete při naplňování tabulky vložit „normalizovanou“ verzi řetězce. Vyhledávání pak lze provést proti sloupci artist_normalized.
Testovací kód:
<?php
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);
$test = ['abcd', 'èe', '€', 'àòùìéëü', 'àòùìéëü', 'tiësto'];
foreach($test as $e) {
$normalized = $transliterator->transliterate($e);
echo $e. ' --> '.$normalized."\n";
}
?>
Výsledek:
abcd --> abcd
èe --> ee
€ --> €
àòùìéëü --> aouieeu
àòùìéëü --> aouieeu
tiësto --> tiesto
Kouzlo provádí třída Transliterator. Zadané pravidlo provádí tři akce:rozloží řetězec, odstraní diakritiku a poté znovu složí řetězec, kanonizuje. Transliterator v PHP je postaven na ICU, takže se spoléháte na tabulky knihovny ICU, které jsou kompletní. a spolehlivý.
Poznámka:Toto řešení vyžaduje PHP 5.4 nebo vyšší s intl rozšíření.