PHP

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

カタカナの濁点には種類があるので、その濁点を統一したい。
例えば下記、これは文字コード UTF-8UTF-8-MAC の違いらしい。
(なぜDBデータにUTF-8-MACの文字列が紛れ込んだかは不明。。。)
スクリーンショット 2018-10-05 10.01.57.png
で、今回この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

解決策

でいろいろ検索したが、最終的に下記のようにシンプルに
半角カナに変換濁点を置換全角カナに変換
することで解決しました。
スクリーンショット 2018-10-05 11.52.10.png

iconvで UTF-8-MACUTF-8 に変換する方法も試しましたが、 UTF-8-MAC は通常MACでしか使えません。

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