PHPでカタカナの濁点の違いを吸収する


カタカナの濁点には種類があるので、その濁点を統一したい。
例えば下記、これは文字コード UTF-8UTF-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-MACUTF-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-MACUTF-8 に変換する方法も試しましたが、 UTF-8-MAC は通常MACでしか使えません。

他にもっと良い方法があれば、知りたいです。

@tadsan さんからコメント欄にてご指摘いただいていますのでそちらも合わせてお読みください。