Edited at

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でしか使えません。

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

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