こんにちは。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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Ameba(アメーバブログ) アメブロで、候補に出てこないオリジナルのハッシュタグは付けられますか? 例えば、超ローカルなお店の名 2 2023/04/25 19:54
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP ページング データベース 1 2022/06/16 10:30
- 新卒・第二新卒 自衛官候補生(海上)に落ちて(不合格になって)しまいました。 対策はしっかりとしていて、万全の状態で 1 2023/07/07 19:53
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(パソコン・周辺機器) WINDOWS11 IMEの日本語入力で困っています 4 2023/04/29 19:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ListBoxのデータを高速でファイ...
-
統計ソフトRでデータ取り込みが...
-
VBAでCSVファイルを途中行まで...
-
バッチファイルの作り方(CSV→...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAでCSVファイルの特定行を書...
-
openした後、closeしないでプロ...
-
VBAコードを張り付け後のエクセ...
-
JavaでCSVファイルを高速に読む...
-
至急お願いします。C言語で.img...
-
タブの色を変更する方法
-
vba dir の相対パス
-
while(<ハンドラ>) {} で行数を...
-
RSS自動生成で文字化け
-
perlをwindows環境でshift-jis...
-
awkスクリプトでダブルクォーテ...
-
unixでのファイルロックの方法...
-
Perlで空白行を削除
-
教えて!perlから.exeファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ListBoxのデータを高速でファイ...
-
動かなくなったのでJavaソース...
-
.netのXmlDocumentを使ってテキ...
-
IEだとCGIが正しく動作しないこ...
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
-
openした後、closeしないでプロ...
-
close()で例外が投げられる理由
-
batファイルでrenameができませ...
-
VBAでCSVファイルを途中行まで...
-
window.open でのファイル指定方法
-
VBAで巨大なファイルの途中から...
-
Perlで特定行から特定行までを...
-
ReadLineでの読み出し行を指定する
-
エクセルVBAで素数だけを出力す...
-
FindFirstFileとFindNextFileで...
-
Perlで特定文字列から特定文字...
おすすめ情報