それなりブログ

とあるWebエンジニアのそれなりのブログ、JavaScript/Node.js/Python/PHP/ゲーム作成 など

[PHP] マルチバイト文字をヘキサ表記に変換する関数

マルチバイト文字を “\x00” という16進数表記 で書きたいな!
・・・という時に、文字コード一覧表 の類をいちいち引くのも面倒なので。

最後の追記にありますが、bin2hex という関数がありました。
糞エントリしてすみません。

コード

<?php
function mb2hex($mb_char) {
$decoded = "";
$len = strlen($mb_char);
for ($i = 0; $i < $len; $i++) {
$char = substr($mb_char, $i, 1);
$dec = ord($char);
$hex = dechex($dec);
$decoded .= $hex;
}
return $decoded;
}

動作確認

<?php
$mb_char = "ち";
$decoded = mb2hex($mb_char);
var_dump($decoded); // -> "e381a1"
$mb_char = "ん";
$decoded = mb2hex($mb_char);
var_dump($decoded); // -> "e38293"
$mb_char = "こ";
$decoded = mb2hex($mb_char);
var_dump($decoded); // -> "e38193"

ってか、こんな面倒な方法以外に

var_dumpにオプションがあったり、とか、何か表示する方法ないっすかね?

[追記] ぐわ、あった・・・

$python
Python 2.5.2 (r252:60911, Nov 28 2008, 15:07:26)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u"あ".encode("utf8")
'xe3x81x82'

俺、本当に頭固いなぁ・・・・・・。

[追記] そのものずばりの bin2hex

<php?
var_dump(bin2hex("あ")); // -> "e38182"

4 Responses to “[PHP] マルチバイト文字をヘキサ表記に変換する関数”

  • pasela より:

    そのコードだと0-Fが1桁になって駄目な気が……。\x0Aとか。
    で、PHPならbin2hexとかじゃ駄目なの?

  • kjirou より:

    うわ、ありがとうっす。
    bin2hexで充分というか、まさにコレをやりたかった。
    > そのコードだと0-Fが1桁になって
    すまん、これはどういうことっすか?
    mb2hex(“0”); // -> “30”
    になるとは思うんですが・・・。

  • pasela より:

    すまん、書き方が悪かった。
    mb2hex(“\x0A”); // -> “a”
    bin2hex(“\x0A”); // -> “0a”

  • kjirou より:

    おおお、どうもっす。
    本当だ、なんでだろう・・・?
    調べマウス。


コメントを残す

メールアドレスが公開されることはありません。

Categories

Archives