人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

アクセス解析でサーチエンジンの検索語が、

\xc1\xeb\xb8\xc2

という感じにエンコードされています。おそらくUTF-8がデコードされるもので、PHP で iconv という関数を使えば戻せそうな感じなのですが、実際にはどのようなコードを書けば元に戻せるでしょうか。

良きアドバイスをお願いいたします。

●質問者: ryuzi_kambe
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP UTF-8 アクセス解析 アドバイス エンコード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ito-yu
●50ポイント

$str = '\\xc1\\xeb\\xb8\\xc2'; //ここにその文字列

echo preg_replace('/\\\\x([0-9a-fA-F][0-9a-fA-F])/e', "pack('c', hexdec('\\1'))", $str);

でどうでしょう。iconv使ってませんが

http://php.net/preg_replace

◎質問者からの返答

ありがとうございます。ばっちりでした。


Web を介してアプリケーションに値を渡す際には、サーバ側で stripslashes してあげる必要がありましたが、その他は万事問題有りませんでした。ちゃんとデコードされたときは、なんだかちょっと感動しました。


あと、 %uXXXX という形式のものもデコードしたいと思っています。もし2つめの回答でお答え下さったらポイント&いるか賞出させていただきますので、お時間ありましたらご回答いただけましたら幸いです。


2 ● ito-yu
●50ポイント ベストアンサー

人力検索の基本に乗っ取って検索してみました。

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;
}
◎質問者からの返答

回答ありがとうございます。残念ながら上手くいかなかったようです。

このページで出来ることと同じことが出来れば良かったようです。単に urldecode をかけるだけでは上手くいきませんでしたが・・・

http://ours.be/w/urlencode.php

いるか賞はさしあげますね。


(追記)こちらで正解でした。

http://www.kowa.org/modules/pukiwiki/93.html?easiestml_lang=en


「この%uXXXXという形式は、PHPのrawurldecodeとかでは対応出来ないようであり、また英数文字はそのまま出力されるので、扱いにくい文字列になっている。

このため、PHP-Stats PROもそのままでは、ページのタイトルや、検索文字列の日本語部部分は、%uXXXXという文字列の羅列で出力されてしまう。 」


とのことです。このページでは EUC に変換というところを utf-8 に修正し、上手く利用することが出来ました。基本に立ち返って検索するきっかけを与えてくださり、ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ