2010年3月30日

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


前川です。

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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年3月30日 15:53
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/94633
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。