トップページ⇒php
1001コメント344KB

CGI: Common Gateway Interface part 11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/06/14 22:26ID:F9qlqHNx
CGIの運用に関する質問スレッドです。

※CGIは特定の言語に依存するものではありません。

Perlのコーディングに関する質問は、専用スレでお願いします:
[Perl 初心者コーナー Part24]
http://pc2.2ch.net/test/read.cgi/php/1054992610/

CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[WebProg 初心者の質問 Part3]
http://pc2.2ch.net/test/read.cgi/php/1045091733/

過去ログ・関連スレッドは >>2-5 あたりに
0405nobodyさん03/08/29 01:22ID:???
>>400
www.hoge.com/foo.cgi

The page cannot be found
The page you are looking for might have been removed, had its name changed, or is temporarily unavailable.

--------------------------------------------------------------------------------

Please try the following:

If you typed the page address in the Address bar, make sure that it is spelled correctly.

Open the home page, and then look for links to the information you want.
Click the Back button to try another link.
HTTP 404 - File not found
Internet Information Services


--------------------------------------------------------------------------------

Technical Information (for support personnel)

More information:
Microsoft Support
0406nobodyさん03/08/30 08:37ID:???
例を挙げるときは、example.comを使いましょう。
0407nobodyさん03/08/31 00:28ID:???
今、CGIを通して、別の画像ファイルを読み込んでそれをブラウザに渡すと言うCGIを作っているんだが・・・

use CGI;
my $q = CGI->new;
my $file = '/hoge/hoge.jpg';
binmode(STDOUT);
$| = 1;
print $q->header(-type=>'image/jpeg');
open ( IN, $file );
binmode ( IN );
while ( <IN> ) {
print STDOUT;
}
close ( IN );
close ( STDOUT );

これで普通は動くよな?
0408nobodyさん03/08/31 00:30ID:???
なんか、ずっと読み込み中になって終わんないんですよ。
0409nobodyさん03/08/31 01:56ID:???
>my $file = '/hoge/hoge.jpg';
パスは間違いない?
my $file = './hoge/hoge.jpg'; なら表示されたけど
0410nobodyさん03/08/31 01:58ID:???
>my $file = '/hoge/hoge.jpg';
こんな場所に画像ファイルを置いてるのか?
ビックリだ。
041140703/08/31 02:02ID:???
失礼しました。少し頭が冷えました。言語はPerlです。
こんなことも言い忘れるとはよほど慌てていたようです。

>>409
パスは絶対指定しています。なので、この形式でいいかと。

>>410
ああ、これはサンプルのパスです。正しいのをさらすと、ユーザー名とかがわかってしまうので。

えーと。なんでだめなんだろう。
0412nobodyさん03/08/31 02:30ID:???
>>411
Content-Length を吐くといいかも知れない。
自信無し。
0413nobodyさん03/08/31 02:36ID:???
意外とそういう「見せたくなくて伏せてる部分」にバグが潜んでいるかもしれない。
0414nobodyさん03/08/31 03:05ID:???
例えば、俺の陰毛にはバグが含まれている。
0415nobodyさん03/08/31 03:07ID:???
はっ。どうせリードパーミッションが無いんだろ。
openのエラー処理してねーし。
041640703/08/31 21:59ID:???
>>411
ビンゴでした。吐いたらうまく表示してくれました。
ありがとうございました。

>>413
今後は注意します。ありがとうございました。

>>415
ご助言ありがとうございます。エラートラップもつけました。

>>414
毛ジラミでしたら、早急に医者に行った方が・・・
0417nobodyさん03/09/01 10:36ID:???
ちなみにオレは試して駄目だったから間にページ挟んでMETAタグで飛ばした
>cookie
0418nobodyさん03/09/02 00:31ID:tJK7g1eG
Aサーバにあるcgiでcsv形式のデータを作成し、
Bサーバにそれをcsvのデータとして置きたいと思います。

これを実現するにはどうすればいいのでしょうか?
というか、ふつうどうするもんなんでしょうか?

●Aサーバにあるcgiから、(ソケット通信で)FTPかSSHでBにログインして、csvファイルをはき出す。
●Bサーバにもcgiを設け、そこで、AサーバからBサーバを(ソケット通信で)httpで呼び出して、
 Bサーバのcgiがcsvをはき出す

くらいしか思いつかないのですが・・・

あと、Aサーバがhttpsで、Bサーバがhttpの場合、このやりかただとデータは暗号化されますか?
0419nobodyさん03/09/02 00:38ID:???
いいんじゃない、合理的でかつセキュリティ等、目的に沿っていれば
csvがそのうちxmlになる可能性も考えるとhttp経由がいいかもね

暗号化はあくまでもサーバがhttpsの場合だけ
(クライアントもhttps知っている必要はあるが)

だからBがAを呼び出す状況で無いと暗号化はされません
0420nobodyさん03/09/02 01:01ID:hJ9owds6
保健室で休息中の少女に何が起こったか・・・
当然のようにHな事態に発展していくのですがいやーリアルリアル。
オマンコからダラダラ流れ出るマン汁、青筋の浮き出たチンチン。
現実ではあり得ないシチュエーションにリアルさがある秀作!
エロアニメがいっぱい。セーラー服美少女実写版も大好評。
今すぐ無料ムービーを!!
http://66.40.59.76/index.html
0421nobodyさん03/09/16 00:39ID:???
>263
処理中に適当にタイムスタンプでも使ってファイル作って
ソレが存在してる間は処理中と判定させるとか。

で自信でも別スクリプトでも良いから適当にそのファイル名を送って
ソレを一定時間毎に読んで、消えたら完了のページ開くみたいな。

hoge.cgi
 処理開始→判定用一時ファイル作成→Locationで飛ばす→処理終了→ファイル消す→exit()

huga.cgi?filename
 クエリ読む→ファイルがあるかどうか調べる→あったらLocation略→なかったら終了した事を知らせてexit()
 hoge.cgiがタイムアウト等で一時ファイルを消せなかった時の為に有り得ない程時間掛かってたらさくっと消す

素人考えだけど駄目かなー。
0422nobodyさん03/09/16 16:37ID:???
あるcgiを呼び出したとき、SSLプロトコルできてるか、そうでないかを判別するのに、
一番汎用的な方法ってなんでしょう?
(ちなみに言語はPerlですが、それは本質的なことではないですよね?)

SSL_PROTOCOL環境変数が空か否かで判断するのかな、と思ったのですが、
どうするのがベストでしょうか?
0423nobodyさん03/09/16 20:34ID:???
>>422
$ENV{'HTTPS'} eq 'on'
042442203/09/16 23:47ID:???
>>423
あ、それ初めて見た(つか、見落としてた)さんくすです
0425nobodyさん03/09/17 20:33ID:???
mod_perlを使ったサーバで、
同じ動作をするcgiが、全く同じ条件でpostメソッドでcgiにアクセスしても、
Internal Server Errorがでるときと正常動作するときがあります。

Internal Server Errorがでても、リロードすると、正常動作してしまうので、
不可思議なのですが・・・。

これは、どんな原因が考えられるのでしょうか?
0426nobodyさん03/09/18 04:23ID:???
半角カナでフォームに入力されたものを、読み込んでEUCにして
(ちなみにスクリプト自体の文字コードはEUC)

それを、&jcode::convert(\$in{$key}, "jis");
みたくして、JISに変換して(正確にいうと、変換しようとして)、
それをメール本文(もちろんJIS)中に変数として入れたら、
文字化けする可能性ありますか?

もしあるとしたら、
&jcode::euc2jis(\$in{$key});
と明示的に文字コード変換したら、
文字化けがなおる可能性はありますか?

実は文字化けではまってるものの、
文字化けが再現できなくなってしまっていて・・・。
0427nobodyさん03/09/18 10:12ID:???
>>425
そのCGIのどこかがマズイのでは?

>>426
メールで半角カナは使えません
042842503/09/20 03:11ID:???
>>427

でも、リロードしてら正常動作するもんで、手がかりがつかめません。

同じことをしてるのに、違う結果がでるなんで・・・と。わけわからん状態です。
どっから疑っていけばいいんでしょうか?
0429nobodyさん03/09/20 03:37ID:???
>>428
タイムアウトや負荷ぎりぎりで動いてるとか
どっちにしてもソース見ないとわからんな
043042503/09/21 16:58ID:???
>>429
>タイムアウト
いや、タイムアウトの可能性はないかと。
すぐにInternal Server Errorになったので。。。

>負荷ぎりぎりで動いてるとか
でも、これが可能性高そうです。ちょっと調べてみます。
0431nobodyさん03/09/21 17:01ID:???
>>430
ソースを公開するなり、そちらが情報を提供する気がないのならこれ以上質問するなよ。
こういう掲示板はGive&Takeによって成り立っているって理解している?

043243003/09/21 21:55ID:???
>>431
>ソースの公開は、仕事の都合上、できないので、すみません。
あと、いちお、名無しでですが、Giveはこのスレでも他のスレや板でも、してます。いちお。
0433nobodyさん03/09/21 23:31ID:???
>>432
その現象が起きる20行程度のソースを晒せば?
それでも仕事の都合上無理ってんなら>>431の言う通り。会社の人に聞けば?
y=x+1が与えられてyの値はいくつでしょう?と聞かれても誰もわからんのでは?
0434nobodyさん03/09/22 19:59ID:???
>>430
どうでもいいよ。何するにしてもPerlのエラーログを調べてから何か言えよ。
0435nobodyさん03/10/17 10:28ID:M5vTMTcp
PerlでCGIを何本か書いているのですが、ある特定のプログラムで
ページが正常に表示されず、ファイルのDLを始めようとするようです。
同じサーバーの他のプログラムは正常に表示するようで、吐き出す
ヘッダも同じにしてるはずなんですが。
本来相手の環境を調べるべきなのですが、素人なので聞かれてる内容も
理解できないらしく、上手く情報が伝わって来ません。

なにか考えられる原因、思い当たる方いませんか?
0436nobodyさん03/10/17 11:08ID:???
>>435
それだけの情報で何かわかる人がいるのか?
0437nobodyさん03/10/17 11:26ID:5bzSqekM
サーバのスクリプティングフィルターが利いてないからじゃないですか?
後は、Webサービスのマッピングをチェックしてみるってのはどうでしょう?
さすがにそれぐらいしか答えようがないですね。
0438nobodyさん03/10/17 12:05ID:???
>>436
>>437
まあ、そうですよね。
ただ同じサーバーの他のスクリプトでは問題ないようなのです。
もちろん当方からのアクセスではそのスクリプトも含めて全て正常に表示されます。
なんとも再現しないのでわからないのですが、
状況からすると、ある特定の環境で問題を起こすCGIの記述の可能性、
と予想したのですが。
0439nobodyさん03/10/17 12:08ID:???
>>438
再現しないならまず再現する様にしてくれ
質問内容に書いて無いからわからんがgetで渡してたりするか?
0440nobodyさん03/10/17 13:00ID:???
>>439
とりあえず最初の閲覧時はgetです。
formからパラメータつけて再帰的に処理する時はPOSTですが。
0441nobodyさん03/10/17 15:28ID:???
wget等で、受信したヘッダごとみてみるのがいいかも
あと、アドレス欄の最後のパラメタを拡張子と誤解して
誤動作するブラウザがある
0442nobodyさん03/10/17 16:40ID:???
CGIへのアクセスはクエリを含まない事で分岐して、
http://www.hoge.net/huga.cgi
のようにCGIを直接呼ぶ事で単純に表示するルーチンに飛ばしてます。

で、当人が言うにはブラウザから、
「このファイルは開けません。ファイル huga.cgi」とか、
「検索の結果、以下のソフトウェアが見つかりました。
このソフトウェアを利用するとファイルを開くこと
ができます。
ファイルの種類: Common Gateway Interface」
とか言われるらしいのです。

ただ、それもこの特定のCGIだけなんですよね。

wget試してみます。
0443nobodyさん03/10/17 16:50ID:???
おお?wgetしてみたら当該CGIは、
Length: unspecified [text/plain]
なんてなってます。
他のCGIは、
Length: unspecified [text/html]
になってるんですが。。。
ヘッダは以下のようにtext/htmlで送出してるはずなんですが。
--
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
--
0444nobodyさん03/10/17 17:00ID:???
おまいら誰よ?元質問のやつはレス番で名乗れや
044543503/10/17 17:06ID:???
すいませんです。
で、Content-type: text/html の送出をスクリプトのなるべく前の
方に持ってきたら
Length: unspecified [text/html]
と表示されました。
これで問題ないかアクセスしてみてもらいます。

しかし、これはどういうわけでしょうか?
後学のためどなたかお分かりの方お教え下さい。
0446nobodyさん03/10/17 17:27ID:???
>>445
text/plainがスクリプト中のどこにも書かれてないか検索した?
0447nobodyさん03/10/17 17:32ID:???
1行づつずらしていけば見つかるよ... きっと... _ト ̄|○
044843503/10/17 17:35ID:???
>>446
検索していませんでした。
検索しましたが、どこにもありませんでした。

実はこのスクリプト、個別の設定情報を書いた複数の違うhoge.cgiから、
共通ライブラリであるcommon.plをrequireする仕様で、
それぞれのhoge.cgiにはユニークな固有の設定情報のみ記述し、
スクリプトのほとんどはcommon.plにあります。
当初送出するヘッダはcommon.plに書いてあったのですが、
Content-type: text/html のみhoge.cgiに持ってきたら
wgetでhtmlが確認できました。

text/plainはhoge.cgiにもcommon.plにもどこにもありませんでした。
0449nobodyさん03/10/17 21:16ID:???
微妙にスレ違いかもしんないけど、Sendmailで送るメールって第3者に見られる可能性ありありだよな。
大事な内容をCGIで送信するのにベストな方法ってありまつか?
0450nobodyさん03/10/17 21:34ID:???
一応CGIの質問なのでここでしていいのかどうか…
何が何だかわからないのでご存知の方いたらご教授願います。

「○○サーチ」というある検索エンジンに自分のサイトを登録しようとしたら、
何度やっても「コマンドが不正です」と出る。
新規登録は動いているからサーチ自体には問題ないようだ。

てことは自分のパソコンに何か原因があるのでしょうか?


0451nobodyさん03/10/17 21:44ID:???
>>450
君のサイトが拒否されてんだよ。あきらめろ。
045245003/10/17 21:55ID:???
>>451
グェッ!そ、そうなんか!?
昨日初めて行ったサーチなんですけど
何でだろう。
045345003/10/17 21:59ID:???
いや違う違う、
まだサイトは登録してないから拒否とかはないはず、
登録画面に入るボタンを押すと「コマンド〜」が出たんですよ。
なんなんだほんと。

0454nobodyさん03/10/17 23:48ID:???
>>453
ドメインで拒否されたんだよ。jpドメイン以外はダメとか。
0455nobodyさん03/10/18 00:04ID:???
>>453
だから検索エンジンってのがあるように、
登録しようとした君のサイトを自動的に見に行って
登録するにふさわしくないと拒否られたんだって
0456nobodyさん03/10/18 04:12ID:???
ていうかさ…

使うだけの人間はここで質問するな。
0457nobodyさん03/10/18 04:15ID:???
>>453
どうやらその検索サイトはHTMLの文法をチェックしているみたいですね。
HTML-lintで90点以上取らないとダメみたいです。
045845003/10/18 21:13ID:???
>>454-457
レスサンキュ。登録あきらめることにしたよ…_| ̄|○
さっきいったらサーチがダウソしていてめんどくなりますた

スレ違いすまんな。さらば!
0459nobodyさん03/10/18 23:12ID:???
>>449
ベストっていったら、
(SSLは必ず使うとして・・・)
●メールは、もし流すなら、
 ウェブサーバ、送信メールサーバ、それを受信するメールサーバとも、
 セキュリティ的に安全なネットワーク内部で完結させること。

とかいいつつ、自分もよく分かってない。
・・・詳しい人フォローきぼんぬ、、、

0460nobodyさん03/10/19 00:13ID:???
メールデータを何らかの媒体に記録して手渡しする。
0461nobodyさん03/10/19 00:31ID:???
>>460
道中で襲われる
0462nobodyさん03/10/27 00:03ID:???
念力
0463nobodyさん03/10/27 10:59ID:???
メールなんてそんなに覗かれないよ
0464nobodyさん03/10/27 16:10ID:???
うん、そんなにはね
0465nobodyさん03/10/27 20:46ID:???
年賀状を覗かれる回数よりははるかに少ないだろうな。
0466nobodyさん03/10/29 12:37ID:aayFZnQs
formをenctype="multipart/form-data"で送信した場合
windowsでは\r\nContent-Type:となっているけどmacだと\rContent-Type:ってなるんですか?
0467nobodyさん03/10/29 12:41ID:???
そりゃmacだし・・・とか思ったんだが
仕様上は改行コードに依存せず
常に\r\nじゃないといけなかったかな?忘れた
0468nobodyさん03/10/29 12:52ID:???
HTTPの仕様は機種に依存しないよ
0469nobodyさん03/10/30 17:06ID:???
すいません、しつもそです。
CGIで、設置ユーザのドキュメントルートを絶対パスで取得することってできますか?

例えば、test というユーザが、
http://server/~test/cgi-bin/test.cgi
という名前でCGIをアップしたときに、test.cgi で
http://server/~test/
と同じ場所の絶対パス(ex: /home/test/public_html )を取得したいのです。

設置ユーザがサイトの管理者であれば、
$ENV{'DOCUMENT_ROOT'} で、
/var/www/html なんかが取れるんですが、
ユーザ毎にサイトを作れる設定にした場合、
$ENV{'DOCUMENT_ROOT'} では取れませんよね…
0470nobodyさん03/10/30 19:58ID:???
if($ENV{'SCRIPT_NAME'} =~ m|^(/~[^/]+/)|){
  $path = 'http://' . $ENV{'HTTP_HOST'} . $1;
}else{
  $path = 'http://' . $ENV{'HTTP_HOST'} . '/';
}

こんなところかな?
スマートではないけど。


tu-ka,Perlの話はPerlスレ逝け。
0471nobodyさん03/10/30 20:47ID:???
>>470

スマン。
取得したいのは絶対パスの方っす。
/home/test/public_html ね。

説明がわかりにくかったかも
一応 %ENV 絡むんで CGIスレで妥当かと思いマスタ
0472nobodyさん03/10/31 01:12ID:???
                             . - _
              _,..,_         ノ´//⌒ ミヾヽ、_
    _____  ,r'´   ``'' - 、ーニ三彡´〃   ! ゙ゞヾ、_`ヽ
  [|<|____├{             /´  {  l  | // ヽ`ーr' }
    ″       !    `、     '   ノ  l. ||l     i l / l   ああっ、つ、つらいです...
              ',      | ̄``''''ー―- ,'´l  l |!` ‐--| l l l
              ',    |             l  l  |    リ,! l
              ',   |          | | ,!    ' リ
  ,.r''ヽ、        _ ',   |          |. |
 ,'    ` ' ' ' ' ' ' ´  `ヽ   !            | |
/ ,.r'´ ̄ '''''' ─−-........__ ,.r'             | '''"''‐-、
~´                            ̄ ̄ ̄
0473nobodyさん03/10/31 03:44ID:???
>>472
そういう検査をされたことがある
0474nobodyさん03/10/31 06:04ID:???
>471
そんなのとって何するんだ?
0475nobodyさん03/10/31 11:40ID:???
>>474

目的としては、
http://server/~user/cgi-bin/query.cgi?file=/index.html
のようなクエリーで、
/home/user/public_html/index.html
のファイルを取得したいって感じかな?

単純にperlに /index.html を渡すと、
本当にルートからの /index.html になってしまうので、
それをどうにかしようと /home/user/public_html を調べて
/home/user/public_html/index.html としたいってことでつ…
0476nobodyさん03/10/31 13:30ID:???
>>475
こんなのでできないか?

$path = $ENV{'SCRIPT_FILENAME'};
$path =~ s/$ENV{'SCRIPT_NAME'}//;

あとは$pathにクエリーストリングのファイル名をくっつけてやれば
0477nobodyさん03/10/31 21:18ID:???
>>469
環境変数 DOCUMENT_ROOT
0478nobodyさん03/10/31 23:37ID:NZRYtOAF
hbgfb
0479nobodyさん03/11/01 00:07ID:???
>>472
直腸検査?

>>469
>>477に同意。
バーチャルドメインでもDOCUMENT_ROOTで取れると思うよ。
0480nobodyさん03/11/01 02:11ID:???
バーチャルドメインなら取れるけどユーザディレクトリは取れないのでは?
0481nobodyさん03/11/01 03:03ID:???
>>480
あぁ、欲しいのはユーザディレクトリなのね。
「ドキュメントルートを絶対パスで」しか見てなかったよ。

なら、プログラム内や設定ファイルで陽に指定するしか
確実な方法は無いだろうね。 cgi-bin ディレクトリと
ユーザのドキュメントルートの位置関係は設定次第で
いくらでも変わるからね。

cgi-bin ディレクトリがユーザのドキュメントルートの下に
存在するなら >>476 でOK。
048247503/11/01 10:32ID:???
>>481

そうっす。ユーザディレクトリ。
やっぱりCGIスクリプト内に直書きするしかないかな…

一応配布CGIとして考えてるんだけど、
CGIをDLするユーザって、
その鯖内の自分のユーザディレクトリパスなんて知らんしね。
下手すりゃ file=/etc/passwd とかってやられそうだ(ガクガクブルブル
(↑これを /home/user/public_html/etc/passwd にできればええんやけど)

0483nobodyさん03/11/01 15:28ID:???
マウントポイントを知らないと>>482のようなこと言うヤシが・・
0484nobodyさん03/11/01 18:41ID:???
Macからのフォーム送信だと、半角スペースが%20ではなく%A0になる事があるのですが、
それに関して詳しく書いてあるサイトなどはありませんでしょうか?
googleなどで探してみたのですが、検索ワードが悪いのかいいサイトが見つかりませんでした。
対策なども含めてかかれているサイトがありましたら、どなたかお教えください。
0485nobodyさん03/11/01 19:33ID:???
>>484
ISO-8859-1 なら %A0 は no-break space (&nbsp;) なので
どっちゃでもいい気もするが。

情報を小出しにせず再現できる条件を全部書いてくれんか。
0486nobodyさん03/11/02 00:02ID:???
>485
レスありがとうございます。
再現条件は自分ではよくわからないのです。
自分の投稿では普通に%20になっているようで、誰がどの状況になった時に
%A0になるかがはっきりとわからないので。
条件絞りきる力がなく申し訳ありません。

%A0についてですが、どっちゃでもいいとおっしゃられますが、我が家のマシンで
%A0の文字をブラウザで見ると半角の「・」みたいに表示されます。
気にしなければ気にならないのかもしれませんが、できれば解決したいと思っていまして。
Perlの正規表現で置き換えようともしたのですが、%A0は「あ」の2バイト目であったりと
なかなか上手くいきません。
それで資料を探していたのです。
0487nobodyさん03/11/02 02:10ID:???
>>486
だからぁ、小出しにしないでって言ってるでしょ。(w

「あ」の 2 byte 目が %A0 なのは Shift_JIS 。
Shift_JIS では 1 byte 文字としての A0 は未定義だから
(特定の環境では) 半角の「・」みたいに表示される。

言語は Perl らしいし置換で事が済むのならこの辺。
http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0488nobodyさん03/11/02 12:11ID:???
>488
・環境
Web上のPerlCGIにてデータを取得している。
送信者はどのような環境かわからない。(条件の限定ができない)
フォームから送信された取得はPerlで行なっているが、その後
取得データをCプログラムで処理することもある。
また、今後Perlで送信データの取得を続けるとは限らない。
スクリプトの文字コードはS-Jisで行ない、結果作成もS-Jisで行なっており、
CプログラミングはVCで行なっている(S-Jis以外使えない)ので、文字コードの変更は困難。
送信フォームもMETAタグにてS-Jis指定を行なっている。
データ取得で使うサーバーはRedHat、Cプログラムを走らせるのはWindows。
S-Jisの状態で%A0を%20に置き換えようとすると「あ」などの文字が化けてしまう。

・目的
%A0が送信されない環境が作れればベスト。
もしくは%A0を%20に上手く置き換える手法を知りたい。
正解のみをここで聞くのではなく、できれば自分できちんと理解し、応用できるようにしたい。


思いつくだけの情報を羅列してみました。
他に足りない情報があればご指摘ください。
紹介されたページはこれからじっくりと読んでみようと思います。
ありがとうございます。
0489nobodyさん03/11/02 12:29ID:???
>>488
お前自分で何言ってるか分かってる???
Shift-JISなら「あ」=「%82%A0」だから
>%A0を%20に置き換えようとすると「あ」などの文字が化けてしまう。
当たり前
0490nobodyさん03/11/02 12:31ID:???
>489
それはわかっています。
だからこそ、「上手く置き換える手法」を知りたいのです。
0491nobodyさん03/11/02 12:33ID:???
つまり、S-Jisで文字化けを起こさないように、%A0で送られてきた半角スペースを
S-Jisの半角スペースである%20に置き換えたいと。
0492nobodyさん03/11/02 12:48ID:???
>>490,>>491
ってことは
>Macからのフォーム送信だと、半角スペースが%20ではなく%A0になる事があるのですが、
これは本当のことなのか?
てっきりShift-JISの文字列見て%A0を空白と勘違いしただけなんだと思ってた。
先頭から1文字ずつ見ていくしかないだろう。

別の文字コードでどうなるか試してみたら?
0493nobodyさん03/11/02 13:13ID:???
あれだな。
<FORM accept-charset="Shift_JIS">
を試してみるとか。macのブラウザが対応してるのかどうかは知らん。

あるいは
<FORM enctype="multipart/form-data">
で常にバイナリ送信させるとか。
0494nobodyさん03/11/02 14:21ID:???
レスありがとうございます。

>492
アクセスログを見たところ、%A0になってしまっていたのはいずれもUAがMac_PowerPCの方でした。
確認できた件数が6件と少ない為に断言はできませんが、Macからの送信で化ける可能性が高いと判断したのですがいかがでしょう?
自分ではMacマシンを所有していないので、正確な調査が行なえず申し訳ありません。

試行錯誤の末、>487のリンク先や、Perlメモの記述を参考に、1文字ずつ見ていくような処理が行なえるようになりました。
これでしばらく様子を見ようかと思います。
別の文字コードで試すというのは、「別文字コードでの送信」という意味でしょうか?
後程、やり方を調べた上で試してみたいと思います。

>493
accept-charasetは知りませんでした。
早速試してみたいと思います。
0495nobodyさん03/11/02 14:22ID:???
余談になるかもしれませんが、accept-charasetを調べている時に下記ページを見つけました。
ttp://www.att.or.jp/perl/cgi-tech-tips.html
ここに掲載されていた、CGI出力ヘッダでの文字コード指定と.htaccessによるADDType指定も
同時に行なった事を報告させていただきます。
0496nobodyさん03/11/02 14:23ID:???
>>494
再現性がないと難しいね。
まあ何か分かったらここへまとめてくれ。
0497nobodyさん03/11/02 14:53ID:???
accept-charaset じゃなくて accept-charset ね。念のため。

自分がこの属性に着目したのは、Operaから文字を投稿するとき
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
と指定していても、送信フォームの内容をShift_JISと判別してくれなかったから。

全部Shift_JISの半角カナで投稿すると、OperaはそれをEUC-JP全角と自動判別して
それをShift_JISに変換してから送信するので、CGI側で受け取った段階で既に文字が化ける。

最初はjcode.plの問題かと思ったけど、jcode.plを外しても同じだったのでほぼ間違いない。
0498nobodyさん03/11/02 15:33ID:???
長井秀和?
0499nobodyさん03/11/02 16:57ID:???
Operaでは&nbsp;が化けるらしい
0500nobodyさん03/11/02 22:32ID:???
>496
自分で確認できないのは厳しいですね。
後から気付いた事とわかった事を少しだけ載せます。

文字化けした6件ともMacのMSIEだった。(MSIE5.16〜5.22)
一部の人の証言ではS-Jisのページで出ていた文字をコピペしたとの事。(全員がそうであるかは不明)

>497
ご指摘ありがとうございます。
危うく間違えるところでした。
0501nobodyさん03/11/04 01:41ID:ZhxpP0UW
PerlのCGI::Carpモジュールってどのような時に必要になるのか
教えてはもらえませんか?
0502nobodyさん03/11/04 08:06ID:???
>>501
ぐぐればでる
050350103/11/04 13:37ID:???
ちょっと自分で調べてみました。
CGI::Carp素晴らしいですね。

use CGI::Carp qw(fatalsToBrowser);

とやるだけでdieや文法エラーに対してブラウザに
エラー内容を表示してくれなんて。
CGIの開発がかなり楽になりますね。
しかも標準モジュールなので別途インストールの必要は
ないみたい。今まで知らなかったよ。

本来の機能はHTTPDのログにエラー内容を書き込んでくれる
ということでよろしいですか?
0504nobodyさん03/11/04 13:45ID:???
本来の機能は佐々岡を先発で使うことだ。
■ このスレッドは過去ログ倉庫に格納されています