アプリ版:「スタンプのみでお礼する」機能のリリースについて

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");

A 回答 (2件)

PHPをはじめたばかりなので詳しくありませんが、bin2hexはどうでしょう?



echo bin2hex("あいうえお");
    • good
    • 0

バイト単位で処理すればいいのでは?どういう表示にしたいのかイマイチわかりませんが、例えばこんな感じで・・



  $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;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
質問の仕方が悪かったです。すみません。
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

お礼日時:2008/03/07 10:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!