文字列検索を実施する際に、全角半角を区別せずに検索させたい場合があるかと思います。
例えば、全角文字の「ABC」で検索して半角文字の「ABC」にヒットさせたい場合です。そのような場合は、文字や文字列を正式に決められた表現に変換する処理「正規化」を行うことで解決します。(もちろん検索される側の文字列の表現が統一されていることが前提にはなります。)
「正規化」はテキストを保存する際の表記を統一するために用いられうこともあります。
PHPではNormalizerというライブラリを利用します。下記に使用例を示します。
<?php // 全角文字表記 $input = 'ABC'; $result = \Normalizer::normalize($input, \Normalizer::NFKC); // 半角文字のABCが出力される echo $result;
このプログラムでNFKC正規化をすると下記のような結果が得られます。
入力 | 種類 | 出力 |
---|---|---|
㈱ | 組み文字 | (株) |
㍇ | 組み文字 | マンション |
ア | 半角カタカナ | ア |
ちなみに正規化の種類には下記の4種類があります。(Wikipediaより引用)。
名称 | 説明 |
---|---|
NFD Normalization Form Canonical Decomposition |
文字は正準等価性によって分解される。 |
NFC Normalization Form Canonical Composition |
文字は正準等価性によって分解され、再度合成される。結果として文字の並びが変換前と変わることもありうる。 |
NFKD Normalization Form Compatibility Decomposition |
文字は互換等価性によって分解される。 |
NFKC Normalization Form Compatibility Composition |
文字は互換等価性によって分解され、正準等価性によって再度合成される。 |
正準等価性とか、互換等価性は、こちらの記事を参考にしてみてください。例も多く載っていて大変わかりやすいです。
コメント