|
|||||||||||||||||||||||||||||||||||||||||||||||||||
2012 2010 2009 2008 2007 |
July 12, 2007. httpと文字コードの話 アクセスの一覧ではなく解析機能がほぼ完成しました。えっと、「機能は」完成しました。デザインとかは無しです。ただテキストでだらだら吐き出すという。ブラウザ比とか、Page Viewとかアクセス数とかを適当に集計可能です。あと機能的に追加するとしたら日当たり⇔時間別アクセスぐらいでしょうか。落ち着いたところでデザインに手を出しましょう。
そうそう、アクセス解析画面は全部英語です。なんでかっていうと、EUCで作り始めたんだけど、googleなんかの検索キーをURLデコードして得られる文字列がUTF-8で、日本語使っちゃうとブラウザ表示時にどっちかが化けるのです。で、英語だけにして、ヘッダにMETAタグでUTF-8だよ〜って書くと言う手抜き作。 でもね、ホントはhttpの仕様上はApacheなどのサーバが返すヘッダ内のコードで日本語をエンコードするのが正しくて、メタタグはあくまで参考程度のものなのです。IEなんかはメタタグしか見てないような動作をしますけど。なので良くないな、と思いつつ放置。
ところが、検索ワードを集計していて問題にぶつかりました。$hoge =~ s/xx/yy/g;とかやればperlでは簡単に文字列置換ができるので、検索キーの全角スペースを半角に置換し、その後splitで分割、という処理を実装したのですが、上手く置換されない。何でかなぁと思ったら、ソースはEUCで保存しているため、直接ソース中に書いた2byte文字は当然EUCなのですが、検索ワードは前述どおりUTF-8なわけです。当然、文字コードが違うため置換されない。 で、ソースをUTF-8で保存しなおして、ローカルのAN-HTTPDで試験したら、バッチリ動作しました。ってことで、安心して日本語で画面が作れるなぁと、取り合えずFTPでuploadしたら、エラーになってしまう。どうもサーバがUTF-8のcgiファイルを正しく処理できない仕様らしい。まぁ、unix系ならデフォルトはEUCなのだろうけど...。 で、結局EUC保存、メタタグだけUTF-8に戻したため、今は検索ワード分割が一部上手く動きません。検索ワードをEUCに文字コード変換してから処理するようにして、ページ全体をEUCで吐き出すようにしなければいけません。あぁ、面倒くさい。こういうときだけは1byte文字圏のプログラマがうらやましい...。 ※パスにはこの日記のタイトルをコピペして下さい。 Copyright 2007 barista. All rights reserved. |
|