カタカナの濁点には種類があるので、その濁点を統一したい。
例えば下記、これは文字コード UTF-8
と UTF-8-MAC
の違いらしい。
(なぜDBデータにUTF-8-MAC
の文字列が紛れ込んだかは不明。。。)
で、今回この2つの文字を比べて、同じ文字として扱いたかった。
$str1 === $str2
でTRUEになるように。
まず試したのは、mb_convert_kana
で V
オプションで濁点を1つの文字として変換することでしたが、うまくいきませんでした。。。
var_dump( mb_convert_kana($str1,"KV","utf-8") === mb_convert_kana($str2,"KV","utf-8"));
次に試したのが、iconv()
で UTF-8-MAC
を UTF-8
に変換する方法でしたが
UTF-8-MAC
は通常MAC上でしか使えないようで、Linux上では下記のようなエラーが出てしまいます。
iconv("UTF-8-MAC", "UTF-8", $str1)
=> iconv(): Wrong charset, conversion from `UTF-8-MAC' to `UTF-8' is not allowed
解決策
でいろいろ検索したが、最終的に下記のようにシンプルに
半角カナに変換
→ 濁点を置換
→ 全角カナに変換
することで解決しました。
iconvで UTF-8-MAC
を UTF-8
に変換する方法も試しましたが、 UTF-8-MAC
は通常MACでしか使えません。
他にもっと良い方法があれば、知りたいです。
@tadsan さんからコメント欄にてご指摘いただいていますのでそちらも合わせてお読みください。