[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 メーリングリストの案内