[PHP-users 35071] 文字変換のにコードについて

前川 映一 (三菱重工業株式会社 長崎造船所 船舶品質保証部 品質保証グループ) 主任 前川 映一 (三菱重工業株式会社 長崎造船所 船舶品質保証部 品質保証グループ) 主任
2010年 3月 30日 (火) 15:53:27 JST


前川です。

sjisで文字を扱った場合、文字化けが生じた関係で、日本語(sjis)を、16進のコー
ドの
文字に置き換えて、データに保存し、再現する場合は、16進を文字コードに戻して
います。

たとえば、文字からhexにする場合は、
kaisya会社123重厚重工業 → 6b616973796189ef8ed03132338f648cfa8f648d488bc6

hexから文字に戻す場合は、
6b616973796189ef8ed03132338f648cfa8f648d488bc6 → kaisya会社123重厚重工業
です。

phpでは、スマートな記述が出来ると思うのですが、どなたか、ご教示いただきたい
のですが。

色々調べて、
unserialize(s)・・・hexから文字コードに使える?
str_replace($f,$t,$s)・・・・文字からhexの変換につかえる?
を探したのですが、どのように使えばよいかを、ご指導ください。

関数は、http://d.hatena.ne.jp/hetima/20061025/1161773698 を
参考にしました。

宜しくお願いします。

PHPは、5.2.13です。

現在のコードは、以下です。

<?php

/*
 * 変換サンプル
 * 文字→hex
 * kaisya会社123重厚重工業 → 6b616973796189ef8ed03132338f648cfa8f648d488bc6
 * hex→文字
 * 6b616973796189ef8ed03132338f648cfa8f648d488bc6 → kaisya会社123重厚重工業
 *
 */

#========= STRING to HEX ==============
function str2hex($string)
{
    $ret="";
	$string=trim($string);

	for($i=0;$i<strlen($string);$i++){
	    $ret .= sprintf('%02x',ord(substr($string,$i,1)));
	}

 	return $ret;

}
//---------------------------------------------------------------------
#====== HEX to STRING============
function hex2str($string)
{
	$ret='';
	$string=strtolower(trim($string));

	for($i=0;$i<strlen($string);$i=$i+2){
		if(substr($string,$i,1)=='0')      $a=0x00; #←ここからの分をス
マートにしたいのですが
		elseif(substr($string,$i,1)=='1')  $a=0x10; #
		elseif(substr($string,$i,1)=='2')  $a=0x20;
		elseif(substr($string,$i,1)=='3')  $a=0x30;
		elseif(substr($string,$i,1)=='4')  $a=0x40;
		elseif(substr($string,$i,1)=='5')  $a=0x50;
		elseif(substr($string,$i,1)=='6')  $a=0x60;
		elseif(substr($string,$i,1)=='7')  $a=0x70;
		elseif(substr($string,$i,1)=='8')  $a=0x80;
		elseif(substr($string,$i,1)=='9')  $a=0x90;
		elseif(substr($string,$i,1)=='a')  $a=0xa0;
		elseif(substr($string,$i,1)=='b')  $a=0xb0;
		elseif(substr($string,$i,1)=='c')  $a=0xc0;
		elseif(substr($string,$i,1)=='d')  $a=0xd0;
		elseif(substr($string,$i,1)=='e')  $a=0xe0;
		elseif(substr($string,$i,1)=='f')  $a=0xf0;

		if(substr($string,$i+1,1)=='0')      $b=0x00;
		elseif(substr($string,$i+1,1)=='1')  $b=0x01;
		elseif(substr($string,$i+1,1)=='2')  $b=0x02;
		elseif(substr($string,$i+1,1)=='3')  $b=0x03;
		elseif(substr($string,$i+1,1)=='4')  $b=0x04;
		elseif(substr($string,$i+1,1)=='5')  $b=0x05;
		elseif(substr($string,$i+1,1)=='6')  $b=0x06;
		elseif(substr($string,$i+1,1)=='7')  $b=0x07;
		elseif(substr($string,$i+1,1)=='8')  $b=0x08;
		elseif(substr($string,$i+1,1)=='9')  $b=0x09;
		elseif(substr($string,$i+1,1)=='a')  $b=0x0a;
		elseif(substr($string,$i+1,1)=='b')  $b=0x0b;
		elseif(substr($string,$i+1,1)=='c')  $b=0x0c;
		elseif(substr($string,$i+1,1)=='d')  $b=0x0d;
		elseif(substr($string,$i+1,1)=='e')  $b=0x0e;
		elseif(substr($string,$i+1,1)=='f')  $b=0x0f;

		$ret .= chr($a|$b);

	}

	return $ret;
}

#=====デバッグライト(検証)========
    $moji = "kaisya会社123重厚重工業";
    $result = str2hex($moji);

    $hexmoji = $result;
    $result2 = hex2str($hexmoji);
    echo $moji;
    echo " → ";
    echo $result;
    echo "<br>";
    echo $hexmoji;
    echo " → ";
    echo $result2;
?>



PHP-users メーリングリストの案内