発想の転換。
(ノ・・)ン。。。。。。(((●コロコロッ
以前の記事
で絵文字を簡単に抽出する方法を書いた。
この方法とは完全に方向性が異なるので、
使い分ける感じで。
ケータイサイトを作る時に、
顧客には
3キャリ絵文字対応するかどうかを聞くわけだが、
それが対応しなくて良い場合もある。
そんな時は絵文字は全く放置状態にしたい。
だからといってソースコードやデータベースをShift-JISにするなどありえない。
何らかの形でEUC-JPやUTF-8に変換しなければならない。
ただ、mb_convert_encodingを使うと、
絵文字が崩壊してしまう。
前回の記事ではそれを補間する方法だったわけだが、
今回は違う。
完全な可逆変換
使用するのはなんと
mb_convert_encodingである。
[More:]
通常
mb_convert_encodingを使って記述する場合はこんな感じだろうか?
$str = mb_convert_encoding( $str, "EUC-JP", "SJIS" );
さて、この"SJIS"というものに疑問を感じたことはあるだろうか?
いや、これが何を表しているかと言うことを考えたことはあるだろうか?
マルチバイト関数のマニュアルにはちゃんと記載されている。
これらは”文字コードの種類”を表している。
(゜Д゜)ハァ!?ソンナノアタリマエジャン!!
いや、厳密な意味の文字コードの種類。
正確には文字コードマップとでもいうのだろうか。
IANA(Internet Assigned Numbers Authority)に登録されているShift_JISを"SJIS"という名前で利用している。
mb_convert_encodingで利用できるEUC-JPには2種類あって、
がある。
同様にShift-JISも複数あって、
~winとついているものは、
正確にはcp932。
winの名前から察しがつくかもしれないが、
Windowsで用いられている文字コードである。
cp932は従来のShift-JISに加え以下のものが追加されている。
NEC 特殊文字(キログラム記号など)NEC選定IBM特殊文字(第3水準漢字など)IBM特殊文字(ナンバー、株記号など)
そしてこの~winとついた文字コードを使用すると、
絵文字が破壊されずにEUC-JPに変換できる。
$str = mb_convert_encoding( $str, "eucJP-win", "SJIS-win" );
こうすると絵文字も含めてEUC-JPに変換され、
$str = mb_convert_encoding( $str, "SJIS-win", "eucJP-win" );
こうすることでちゃんと絵文字が復元できる。
これらのデータをデータベースに格納する時は、
MySQL5などのようにデータベースがCP932に対応している必要がある。
利用するときは注意しよう。