\xc1\xeb\xb8\xc2
という感じにエンコードされています。おそらくUTF-8がデコードされるもので、PHP で iconv という関数を使えば戻せそうな感じなのですが、実際にはどのようなコードを書けば元に戻せるでしょうか。
良きアドバイスをお願いいたします。
人力検索の基本に乗っ取って検索してみました。
http://www.factory.gr.jp/~ishigaki/works/
に到達し、
http://www.factory.gr.jp/~ishigaki/works/escuni2euc.php3.txt
を発見。php3となっていますが、php4でもphp5でも動くと思います。
上記のuni2utf8()を定義しておき、さっきのpreg_replaceみたいに使ってやればOK、だと思います。
%uXXXX形式にエンコードされた文字列のサンプルを提示してもらえたらテストできたんですが…
$str = '%uXXXX%uYYYY'; //ここに%u文字列 echo preg_replace('/%u[0-9a-fA-F]{4}/e', "uni2utf8('\\1')", $str); //以下は引用です。 function uni2utf8($uniescape){ $c = ''; $n = intval(substr($uniescape, -4), 16); if($n < 0x7F){ //0000-007F $c .= chr($n); }elseif($n < 0x800){ //0080-0800 $c .= chr(0xC0 | ($n / 64)); $c .= chr(0x80 | ($n % 64)); }else{ // 0800-FFFF $c .= chr(0xE0 | (($n / 64) / 64)); $c .= chr(0x80 | (($n / 64) % 64)); $c .= chr(0x80 | ($n % 64)); } return $c; }
$str = '\\xc1\\xeb\\xb8\\xc2'; //ここにその文字列
echo preg_replace('/\\\\x([0-9a-fA-F][0-9a-fA-F])/e', "pack('c', hexdec('\\1'))", $str);
でどうでしょう。iconv使ってませんが