旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

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

2009年11月12日

マルチバイト文字を “\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"