Możliwym rozwiązaniem byłoby utworzenie kolejnej kolumny w bazie danych obok „artysty”, np. „artist_normalized”. Tutaj, podczas wypełniania tabeli, możesz wstawić „znormalizowaną” wersję ciągu. Następnie można przeprowadzić wyszukiwanie w kolumnie artist_normalized.
Kod testowy:
<?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";
}
?>
Wynik:
abcd --> abcd
èe --> ee
€ --> €
àòùìéëü --> aouieeu
àòùìéëü --> aouieeu
tiësto --> tiesto
Magię wykonuje klasa Transliterator. Określona reguła wykonuje trzy akcje:rozkłada ciąg znaków, usuwa znaki diakrytyczne, a następnie rekomponuje ciąg, przekształca go w kanonizację.Transliterator w PHP jest zbudowany na ICU, więc robiąc to, polegasz na tabelach biblioteki ICU, które są kompletne i niezawodny.
Uwaga:to rozwiązanie wymaga PHP 5.4 lub nowszego z intl rozszerzenie.