考えられる解決策は、データベース内の「artist」の横に「artist_normalized」のような別の列を作成することです。ここでは、テーブルにデータを入力しているときに、文字列の「正規化された」バージョンを挿入できます。その後、artist_normalized列に対して検索を実行できます。
テストコード:
<?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";
}
?>
結果:
abcd --> abcd
èe --> ee
€ --> €
àòùìéëü --> aouieeu
àòùìéëü --> aouieeu
tiësto --> tiesto
魔法はTransliteratorクラスによって行われます。指定されたルールは、文字列を分解し、発音区別符号を削除してから、正規化された文字列を再構成するという3つのアクションを実行します。PHPのTransliteratorはICUの上に構築されているため、これを行うことで、完全なICUライブラリのテーブルに依存します。信頼性があります。
注:このソリューションには、 intlを備えたPHP5.4以降が必要です。 拡張機能。