
こんにちは。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では正しく検索ができるものとできないものがあるのかと思っています。
もしこの件に関してなんらかの助言ができる方がおられましたら、何でもかまいませんので教えていただければ幸いです。宜しくお願いします。
No.2
- 回答日時:
IEでCGIのデバッグやってるとそういう事態になりますね。
一度CGIの重大エラー検出(Premature end of script headers)
すると抜け出せなくなることがあります。
クッキー、スクリプトを使わない単純なCGIでもそうなります。
以前は対処するために毎回CGIファイル名を変えたりして。
最近はいろいろまっとうなブラウザが出てきたのでIEに頼る必要はありませんね。
ところで、CGIの出力の頭にキャッシュ無効命令入れてますか?
Cache-control: no-store
この回答への補足
ご回答有難うございます。
IEに頼らない方を選びたいところですが、やはりIEユーザーが多数いる状況だとそういうわけにも行かないのが歯がゆいところです。
Cache-control: no-store
上記の命令は入れていません。
はぁ~、困りました。
No.1
- 回答日時:
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の文字コードを自動的に変換していないので値を読み込めないのではないかと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlのエラーについてご教授く...
-
perlについての質問
-
INDIRECT 横に再度抽出したい
-
openした後、closeしないでプロ...
-
テキストファイルで提出とは?
-
検索ボックスから製品名を検索...
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxのデータを高速でファイ...
-
統計ソフトRでデータ取り込みが...
-
.netのXmlDocumentを使ってテキ...
-
VB6で"r"みたいな文字が返って...
-
IEだとCGIが正しく動作しないこ...
-
ExcelをCSV書き出す場合のシー...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
Windowsで複数のファイルを同じ...
-
where can I buy snowbord in t...
-
ReadLineでの読み出し行を指定する
-
バッチファイルの作り方(CSV→...
-
C言語で特定の行を抽出する方法...
-
FindFirstFileとFindNextFileで...
-
readdir()で得られるファイル・...
-
ディレクトリ名を取得したい
-
VBAで巨大なファイルの途中から...
-
ディレクトリの判別
おすすめ情報