Web Artisan Blog - ウェブ アルチザン ブログ

PHP:parse_urlで想定外の文字コード変換が行われてるっぽい件

PHP

2005年09月05日

アフィリエイトから企業サイト分析まで。訪問者の動きがまるわかりのアクセス解析サービス「リサーチアルチザンプロ」

LINEやSkypeみたいなビデオ通話がブラウザだけでできる!オンライン通話サービス「EZ-Interview - イージーインタビュー」

JavaScriptのdocument.refererで、所謂リファラーが取得できます。
これで、どのサイトからリンクされてきたか?どういうキーワードで検索されたか?
なんかが解る訳です。

例えば、Googleで「Web Artisan」というキーワードで検索された場合、
document.refererで下記のような値を取得できます。

http://www.google.co.jp/search?hl=ja&ie=sjis$oe=sjis&q=%EF%BC%B7%EF%BD%85%EF%BD%82%E3%80%80%EF%BC%A1%EF%BD%92%EF%BD%94%EF%BD%89%EF%BD%93%EF%BD%81%EF%BD%8E


検索サイトでは、大概キーワード部分は”%EF%BC%B7〜”のように、
URLエンコードされますので、上記のような感じでリファラー取得となるのです。
で、当サイトでも色々な事を実験しているのですが、
たま〜に、Google経由でリファラー部がURLエンコードされず、

”http://www.google.co.jp/search?hl=ja&ie=sjis$oe=sjis&q=Web Artisan”


のように、リファラー取得する場合があります。

この原因は定かではなく、OS・ブラウザ・サイト等、
どういうユーザー環境で検索された場合に発生するかは調査中なのですが、
※GoogleのGETパラメータより、SJIS環境なのは検討つきますが。。(&ie=sjis$oe=sjis)
とにかくURLエンコードされていない模様です。


で、このリファラーより検索キーワードを取得したい場合、
上記正常系のURLエンコードされたリファラーであれば、
PHPのurldecode関数でURLデコードしてやれば。
「Web Artisan」という文字列が取得できます。

$str = urldecode('http://www.google.co.jp/search?hl=ja&ie=sjis$oe=sjis&q=%EF%BC%B7%EF%BD%85%EF%BD%82%E3%80%80%EF%BC%A1%EF%BD%92%EF%BD%94%EF%BD%89%EF%BD%93%EF%BD%81%EF%BD%8E');
※厳密には、もうちょっと複雑なコードになりますが、ここでは簡単に。。




次に、上記異常?系のURLエンコードされていないリファラーからを取得したい場合、
まあURLデコードせずに単純に取得できると思いきや・・・取得できませんでした。。
どうもリファラーの「Web Artisan」という文字列部分だけが取得できません。

・・途方に暮れている時に出会った以下の記事に助けていただきました。

PHPを利用した日本語文字列の変換
・・・・・・
・・・・・・
上で紹介した手順に従うと、parse_urlで想定外の文字列変換が行われていることが判明した。



当サイトの実験でも、上記りファラーをparse_url関数で分解していました。

$ary = parse_url('http://www.google.co.jp/search?hl=ja&ie=sjis$oe=sjis&q=Web Artisan');



これはこれで便利なんですが、
どうも記事の通りparse_urlで文字コード変換が行われている為に、
文字列取得できないようでした。
よって、explode関数での分解に切り替えました。

list($host, $query) = explode('?', 'http://www.google.co.jp/search?hl=ja&ie=sjis$oe=sjis&q=Web Artisan');



これで、想定通りに異常?系のURLエンコードされていないリファラーから、
「Web Artisan」という文字列部分を取得する事が出来ました。


この問題は、parse_urlの変換というより、
GoogleでURLエンコードされずに取得してしまう部分が問題なのですが、
その絡みでparse_urlの問題も明らかになったのでメモしときます。

Web面接に最適。ブラウザだけでビデオ/音声通話ができるオンライン通話サービス。「EZ-Interview - イージーインタビュー」
訪問者録画機能も付いたシンプルで高機能なリアルタイムアクセス解析「リサーチアルチザンプロ」