Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

カタカナの濁点には種類があるので、その濁点を統一したい。
例えば下記、これは文字コード 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 さんからコメント欄にてご指摘いただいていますのでそちらも合わせてお読みください。

fullspeed
独自のアドテクノロジーにより、DSP、ソーシャルメディア、SEO、リスティング、アフィリエイトを展開
https://www.fullspeed.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away