• 締切済み

AU絵文字をUTF8->EUCJP-winで文字化け

初めて質問させて頂きます。宜しくお願い致します。 只今携帯サイトを趣味で開発してるのですが、以下の所で 詰まってしまっています。 [環境] 開発文字コードUTF-8(SBのG3も対応したい為) 保存DB MySql EUCJP フォームから入力された値をDBに保存して、再度読み出したいのですが、 $buf = pack('H*', 'ef82b2'); // AU 絵文字 (ハート) print "ef82b2 -> " . $buf //実機で見た時に絵文字が表示されます $buf = mb_convert_encoding($buf,"eucJP-win","UTF-8"); print "euc -> " . bin2hex($buf) //ここで見ると0x3Fになります $buf = mb_convert_encoding($buf ,"UTF-8","eucJP-win"); print "utf8 -> " . bin2hex($buf)//ここで見ると0x3Fになります 上記のようにeucJP-winに変換した時点でコードがおかしくなっています。 ※DoCoMoの絵文字'ee****'の場合は正常に変換が出来ます。 これはAU絵文字の場合はeucJP-winの文字コード領域?の範囲を超えてるとかそういうことでしょうか?ネットで探して見たのですが、見つかりませんでした。 どうかご教授下さいますようお願い致します。

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

回答No.1

基本的に携帯用の絵文字は、EUC-JPやUTF-8で他の文字が存在しない領域を使用していると思います。 EF82B2がAUの絵文字と言うことは知りませんでしたが、EUC-JPには該当する文字は無いと思います。 通常、日本語には存在しない文字だと思うのです。 つまり >これはAU絵文字の場合はeucJP-winの文字コード領域?の範囲を超えてるとかそういうことでしょうか こういうことですね。 Docomoの絵文字が元に戻るのはたまたまだと思います。 私も絵文字のコンバータを作ったことがありますが、絵文字を取得した時点で特殊な記号に変換して保存する方法を取りました。 他のサービスを見ても、大体どのサービスでも絵文字のデータベースを用意していて、それぞれ特殊な記号に変換して保存しています。 http://c.peps.jp/pc/emoji_code.php?mode=2 ここはとあるサービスの絵文字変換です。 ここは記号ではなくそのまま日本語として保存しているようですね。 [晴れ]と保存されていれば、携帯で見た場合は各キャリアで用意されている太陽の絵文字を、PCで見た時は画像として出力するような仕組みになっていると思います。 /([\xEB-\xED][\x40-\xFC])|(\xEE[\x40-\x8D])/ AUの絵文字のページであるUnicode表を見る限りでは、こんな範囲になっていると思います。 これで取得したデータをbin2hexするなどして、該当するテーブルから予め用意してある記号に変換するのが一般的じゃないかな?と思います。 また、以下のページで配布されている物があるようです。 http://surf-style.us/ ちょっと詳しくは見てないですが、使えそうな気がします。

関連するQ&A

  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • UTF8からEUCJP-WINで文字化け

    MySQLのmysqldumpでUTF8を指定してバックアップを行っていましたが、 EUCJP-WINになっていました。 既にDBサーバーがクラッシュしていてUTF8のバックアップをとることはできず。 (1)、~、髙(はしごたか)は文字化けの状態です。 なんとか修復しようと試みていますが、どなたかよい方法を ご存じではないでしょうか。

  • 機種依存文字

    いつもお世話になっております。 機種依存文字について質問させていただきます。 CSVファイルをアップロードして、文字コードがEUCのデータベースに 格納したいと思っております。(PHPの文字コードもEUCになっております。) 「(はしごたか)」「(たつさき)」などの機種依存文字が 文字化けをしてしまいます。 $name = mb_convert_kana(mb_convert_encoding($data[1], "EUC-JP", "Shift-JIS"), "KV") $name = mb_convert_kana(mb_convert_encoding($data[1], "eucJP-win", "Shift-JIS"), "KV") としても文字化けをしてしまいます。 また、以下の設定をしても文字化けは解消されません。 ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 皆様、ご提示お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Linux PHP:Version 4.3.1 DB:MySQL 3.23.56

    • ベストアンサー
    • PHP
  • SJIS→UTF-8変換後の文字化けについて

    EXCELで作ったテキストデータ(SJIS)をPHPで読み込んでUTF-8でDBへ書き込むという処理をしたいのですが、一部どうしても文字化けしてしまう文字("l(リットル)"と"II")があり困っています。 具体的には、data.dat(SJIS)を、 hoge.php(UTF-8)で、 $data = mb_convert_encoding(file_get_contents("data.dat"),"UTF-8","auto"); というようにしています。 テキストデータはSJIS、DBへはUTF-8というのは変えられません。 なにかよい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • euc-jpからutf-8の文字コード変換について

    現在、何らかのhtmlを取得する際にはurf-8で統一しようと思っているのですが、 たとえば <?php $f=file_get_contents("http://blog.livedoor.jp/dqnplus/")//文字コードEUC-JP; $f = mb_convert_encoding($f,"utf-8","eucjp-win,utf-8,sjis-win,EUC-JP"); echo $f; ?> では、EUC-JPからの変換がうまくいきません。 ……というより、EUC-JPのエンコーディングのみ失敗してしまいます。 (文字化けしたもののみ抽出すると、すべてEUC-JPでした) どのようなコードを書けば、正常にエンコードできるでしょうか。 どなたかご教示のほど、どうかよろしくお願いいたします。

    • 締切済み
    • PHP
  • 文字列を文字コードの数値に変換する方法

    JISコードの日本語を含む文字列を、文字コードの数値に変換する方法がわからなくて困っています。とりあえずは文字列ではなく、1文字だけ変換することを目指してord関数を使ったんですが、1バイト文字はうまくいったのですが、2バイト文字だと思うような結果になりませんでした。 例)以下のように変換したいです。 「a」→「97」 「あ」→「9250」 どなたかいい方法や関数をご存じないでしょうか? ちなみに下記のように片っ端から試してみたのですが、思うような結果が得られませんでした。 $buf = mb_convert_encoding($_POST["string"], "JIS", "EUC-JP"); $jis_code1 = ord("$buf"); $jis_code2 = bin2hex("$buf"); $jis_code3 = urlencode("$buf"); $jis_code4 = intval("$buf");

    • 締切済み
    • PHP
  • 文字コードの検出が正しいかを検証する方法

    PHPの mb_detect_encoding 関数を使っているのですが、 文字エンコーディングの検出が間違っていないかを検証する為に、 以下のように、検出された文字コードに戻し、元の文字列と一致するかで、 検出された文字エンコーディングが正しかったか確認しています。 $str = file_get_contents ( $url ); $moji_code = mb_detect_encoding ( $str , "ASCII,JIS,UTF-8,eucJP-win,SJIS-win" ); $str_after = mb_convert_encoding ( $str , 'UTF-8' , $moji_code ); if ( $str !== mb_convert_encoding ( $str_after , $moji_code , 'UTF-8' ) ) {     //文字化けしている可能性あり } これで、完璧でしょうか?

    • ベストアンサー
    • PHP
  • 文字コード(UTF-8)文字化けについて

    以下のphpを実行したところ、入力した文字によって文字化けしたりしなかったりします。 どなたか原因が分かる方がいらっしゃったら教えてください。 (見、一は化けない。上、実は化ける。) phpはバージョン5.2.8を使用しています。 (コード)----------------------- <html lang="ja"> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <head> </head> </body> <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $org_text1 = "見"; $org_text2 = "上"; $org_text3 = "実"; $org_text4 = "一"; $telop_text1 = mb_convert_encoding($org_text1,'utf-8','ASCII, JIS, EUC-JP,SJIS'); $telop_text2 = mb_convert_encoding($org_text2,'utf-8','ASCII, JIS, EUC-JP,SJIS'); $telop_text3 = mb_convert_encoding($org_text3,'utf-8','ASCII, JIS, EUC-JP,SJIS'); $telop_text4 = mb_convert_encoding($org_text4,'utf-8','ASCII, JIS, EUC-JP,SJIS'); echo "telop_text1="; echo $telop_text1; echo "<br>"; echo "telop_text2="; echo $telop_text2; echo "<br>"; echo "telop_text3="; echo $telop_text3; echo "<br>"; echo "telop_text4="; echo $telop_text4; ?> </body> </html> (結果)------------------------- telop_text1=見 telop_text2= telop_text3=タ telop_text4=一

    • ベストアンサー
    • PHP
  • 急に文字化けを起こすようになりました

    こんにちは。 さて、過去2年間位、特に問題のなかったページで、突如文字化けを起こすようになりました。 ・mysqlバージョン・・・申し訳ないのですが、今(深夜ゆえ)分かりません。 ・mysqlの文字コード・・・EUC ・HPの文字コード・・・UTF-8 サーバー側にデータベースの破損等聞いても、特に問題はないと言われました。 mb_convert_encoding($v,'UTF-8','EUC-JP'); を mb_convert_encoding($v,'UTF-8',"EUC-JP,UTF-8,auto"); にしたり、色々やっても変わりません。 本当に2年間位は、正常だったのです。特に設定もいじってません。 情報が不足しているかとは思いますが、(会社に行けばバージョンなど分かります。) 何が原因なのか、思いつく事があれば、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mysql登録時の文字化け

    PHPで作成した登録フォームで入力されたデータをmysqlに登録すると、文字化けというか?になってしまいます。すべての文字を検証したわけではないのですが、どうも環境依存文字が?になってしまうようです。環境依存文字を登録するにはどうしたらいいでしょうか? ちなみに、現在の文字コードは HTMLの<head>の部分に<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> PHP開始時に mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ただし、PHPの設定ファイルがさわれないのでPHP使用時の内部文字コードは恐らくデフォルトのEUC mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci ファイルの保存形式はutf-8(BOMなし) SQL文のデータ部分にmb_convert_encodingを使用 例: insert into test(test1,test2) values( mb_convert_encoding("テスト1","EUC-JP","UTF-8"), mb_convert_encoding("テスト2","EUC-JP","UTF-8")) よろしくお願いします

    • ベストアンサー
    • PHP

専門家に質問してみよう