- 締切済み
文字列を文字コードの数値に変換する方法
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");
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- narusuji
- ベストアンサー率40% (4/10)
PHPをはじめたばかりなので詳しくありませんが、bin2hexはどうでしょう? echo bin2hex("あいうえお");
- shimix
- ベストアンサー率54% (865/1590)
バイト単位で処理すればいいのでは?どういう表示にしたいのかイマイチわかりませんが、例えばこんな感じで・・ $buf = mb_convert_encoding($string, "JIS", "EUC-JP"); $dest = ''; for ($i = 0; $i < strlen($buf); $i++) { $w = substr($buf, $i, 1); $w = bin2hex($w); // 「表示したい編集方法」に合わせて書き替え $dest .= $w; } print $dest;
お礼
回答ありがとうございます。 質問の仕方が悪かったです。すみません。 JIS文字列を10進数のJISコードに変換し表示する方法でした。 お答えいただいたものを参考にしつつ、自己解決しました。 どうもありがとうございました。 こんなことで困る人はいないかもしれないけど、一応メモです。 $line = mb_convert_encoding($_POST["string"], "JIS", "EUC-JP"); for ($i = 0; $i < mb_strlen($line, "JIS"); $i++) { $buf = mb_substr($line, $i, 1, "JIS"); $buf = bin2hex($buf); $buf = ereg_replace("^1b2442", "", $buf); $buf = ereg_replace("^1B284A", "", $buf); $buf = ereg_replace("^1b2849", "", $buf); $buf = ereg_replace("1b2842$", "", $buf); $buf = hexdec($buf); $disp .= "「{$buf}」"; } 文字列をバイナリ化し、下記の特殊コードを削除して10進数変換。 JISコードの始まり = 1B2442 JISローマ字の始まり = 1B284A JIS半角カナの始まり = 1B2849 ASCII コードに戻るとき = 1B2842