アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。CGI初心者のものです。CGIに関して詳しい方がおられましたらお教えください。

現在Perlでデータベースを作成しています。データはCSVで保存し、検索結果があれば詳細情報を読み出すものです。データとして外国語と日本語を扱うので文字コードはUTF-8にしています。

検索結果が複数ある場合、入力日でソートして入力日の古いものが検索結果として表示されます。最初に表示される検索結果の上部に「次の候補へ」というリンクをつけて、複数ある結果の他の候補を参照できるようにしています。

「次の候補へ」へのリンクは、下記のような構造で検索フォームの内容を再度リロードして検索する形式を取っています。

*********************************************
$page_line = $view_end + 1;
$count = $data_count + 1;
if ($view_end ne $data_count ) {
#次ページHTML
$reload = $reload . '?' . 'kw=' . $FORM{'kw'} . '&' . 'action=search' . '&' . 'line=' . $page_line;
print <<"EOL";
<td width="500" align="left" class="tbg4">
<p class="text"><img src="../img/link.gif" alt="link1" width="7" height="9"> <a href="$reload">検索候補が$count件存在します。次の候補へ</a></p>
</td>
</tr>
EOL
*********************************************
このロジックでFire fox, Opera, Safari, Chromeでは問題なく、次の候補へ移動できます。しかし、IEではこの処理をせずに初期画面(TOPページ)が表示されてしまいます。初期画面に移動すると言うことは他の検索候補を検索できなかったことになります。実際は他にも候補があるのに、どうしてこのように動作するのか、私にはわかりません。

しかも、奇妙なことに幾つかの文字に関してはIEでも「次の候補」が正しく表示されるものもあります。もしかすると文字コードのせいでIEでは正しく検索ができるものとできないものがあるのかと思っています。

もしこの件に関してなんらかの助言ができる方がおられましたら、何でもかまいませんので教えていただければ幸いです。宜しくお願いします。

A 回答 (3件)

同様の現象に当たったことがあります。


原因を追究してなく、回避していただけなのですが
回避方法はすでに気づかれているエンコードを行うことでした。
    • good
    • 0
この回答へのお礼

アドバイス有難うございました。
私も結局のところ原因を追求できずにいますが、IEでは幾つかの文字が正しくURLでエンコードされないようです。最終的に私もエンコード処理をさせることで今回の問題は回避することができました。

お礼日時:2008/11/14 09:16

IEでCGIのデバッグやってるとそういう事態になりますね。


一度CGIの重大エラー検出(Premature end of script headers)
すると抜け出せなくなることがあります。
クッキー、スクリプトを使わない単純なCGIでもそうなります。
以前は対処するために毎回CGIファイル名を変えたりして。
最近はいろいろまっとうなブラウザが出てきたのでIEに頼る必要はありませんね。

ところで、CGIの出力の頭にキャッシュ無効命令入れてますか?
Cache-control: no-store

この回答への補足

ご回答有難うございます。
IEに頼らない方を選びたいところですが、やはりIEユーザーが多数いる状況だとそういうわけにも行かないのが歯がゆいところです。

Cache-control: no-store

上記の命令は入れていません。
はぁ~、困りました。

補足日時:2008/11/12 15:24
    • good
    • 0

IEのキャッシュだとかクッキーの差し戻しのしかたがセキュリティ設定でいちいち違うからじゃないかな?


実際にリロードによって値をちゃんと取れているのかどうかをデバグした方が良いと思うよ。

この回答への補足

ご回答有難うございます。

初期画面へ移動する段階で、確かにIEは値を読んでいないということになります。少し試して分かったことは、IEが文字コードを正しく認識していないと言うことです。例えば「好き」という文字を検索して複数の候補があった場合、下記のように再検索がかかります。

http://localhost/cgi-bin/db.cgi?kw=好き&action=search&line=1

IEでは上記の検索の「好き」を値として読み込んでいません。
しかし、Fire foxやOperaなどは「好き」の値を下記のように「%E5%A5%BD%E3%81%8D」に書き換えて値を読み込みます。

http://localhost/cgi-bin/db.cgi?kw=%E5%A5%BD%E3% …

このように変換されているURLでIEで試してみると、IEでもちゃんと値が読み取られます。

SafariやChromeだと「好き」→「%E5%A5%BD%E3%81%8D」→「好き」に変換を繰り返しているので検索表示は、

http://localhost/cgi-bin/db.cgi?kw=好き&action=search&line=1

上記で値が読み込まれます。

ここまででわかったことはIEはUTF-8の文字コードを自動的に変換していないので値を読み込めないのではないかと思っています。

補足日時:2008/11/12 15:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!