ぴゅあさんありがとうございました。
何とか頑張ってみます。
仕事大変なところに、仕事を上乗せしてしまってすいませんm(_ _)m
年末大変でしょうが、体に気をつけて頑張ってください。
>まっすんさん
見にきてくださいと言われてもCGIのコードは見えないので。。。。
というか閲覧がないし?
と、書けば見えるのか。。。。
「フォームにはじめからある文字は、シフトJISで表示される」はEUCですね?
「文字を打ち込む部分がEUCになるようにCGIに命令があります」は内部処理のためでしょ
う。
出力のとき固定部分はシフトJISですが入力データはEUCで吐き出していますね。
まず投稿フォーム画面
これは文字コードは何でも良いです。
厳密には前に書いたように(ほかの人宛だったかな?)METAタグで文字セットを指定して
おくと文字コードの違うページから飛んできたときの誤判断を防げるでしょう。結構これを
やっていないページがあって掲示板などで文字化けに気付かずに書き込んでしまうことがよ
く見られます。
CGIに渡ったとき「文字を打ち込む部分がEUCになるようにCGIに命令があります」とあるの
は日本語を処理するときに誤動作させないためとどんな文字コードであってもEUCに統一する
ためです。
「誤動作を防ぐためにEUC」というのはCGIでの文字処理をちゃんと考えればシフトJISにも
できる筈ですけど(シフトJISだと半角かな文字が化けなくなる)。
記事画面のとき化けているのはCGIが受け取ったデータがEUCのままになっているにも関わ
らずCGIのソースコードがシフトJISで書かれているからです。
つまりprint文で出している定数の文字列がシフトJISになっているということです。
これには2つのどちらかの方法で対処できます。
1つはソースコード全体をEUCに変換する。
もう1つはCGIで処理したデータをprintするときに(或いはファイルに書き出すときに)
シフトJISに変換してやる(CGIがデータを取り込んだときにEUCに変換したときと同様)。
いずれの場合も文字コードを統一してやるということです。
ふぅ 言葉が乱暴になっているような。。。。
98からNTへの移行作業を行っている最中にチャット作ってくれ掲示板作ってくれというICQ
が入っている間に更に他からカウンタ付けてくれページがちゃんと表示できないとか電話が掛
かり捲くって。。。。
まだ15分後に掛かってくるらしい
と言いつつ直ぐに掛かってきているが
かなりお疲れ。。。。
またまた引き続きGuestBookのことですが、文字化けが直りません。
書き込みの後、こちらが書き込んだ場所はEUCで表示され、フォームにはじめからある文字は、
シフトJISで表示されるのですが、CGIを抜けた後、すべてEUCに変換されるようにしたいのですが…文字を打ち込む部分がEUCになるようにCGIに命令がありますが、変換不必要部分が、
シフトJISとして、表示されるみたいです。
一度時間がありましたらHPに着てみてください。
http://www.b-free.ne.jp/guest/guest/index.htm
です。もう聞かなくて良いと思ったのですが…何度もご迷惑かけます。
>まっすんさん
漢字コードを何にするかは編集している環境に合わせるが良いでしょう。WinならシフトJIS,
UNIXならEUCが楽なのだと思います。
サーバが何であるかによって決める必要はない筈です。サーバは送り出しているだけ
でファイルの中身を感知せず(ちょっと嘘[*1])実際にそのファイルを使うのはクライアント
側のブラウザですので。
ただMETAタグで文字セットは指示しておくのが良いでしょう。
※プロバイダのサーバによっては制限される部分がある場合もある(ジオとか)
相互間の変換ツール(nkfだったかな?UNIXには確か標準でWinではフリーソフトで)もあ
るのでそれを使う手もありますが手間が掛かるだけと思います。
因みにフォームやCGIでメールを送信する場合にはそのデータをJISにしておくのが良いよ
うです。
※CGIではnkfを通せば済むがフォームではHTML文書全体をJISにしたほうが良い?(未確認)
*1
全く解釈しないというのは嘘です。例えばSSI。これはブラウザに渡す前にサーバが処理
しているので。
最近無造作に日本語混じりのURLを使う人が多いのですけどUNIXサーバでSSIのパスに日
本語が含まれているとき誤動作する場合があるのではないかと考えます(EUCにすれば可)。
またIMGタグのURLは?ということの方が多いと思いますけどこれはブラウザに渡ってから
ブラウザがサーバに要求しなおしているので大丈夫なのだと思います。
ただシフトJISに対応していないブラウザも在りうるので誤動作する場合があると考えます。
URLの日本語化も進んでいる?とは言え何でも可ではないだろうということで。
CGI内での日本語の扱いに付いては以前に書いた(まだあるけど)ので省略。
ぴゅあさん中田さんありがとうございました。何とか出来ました。
後は、文字化けをなくすだけです。EUCとシフトJISが入り混じっているので、それを直せば
出来あがり!サーバがUNIXなのでEUCに統一してホームページを書き直せばOKですか?
ホームページを作るソフトで言語をUNIXに合わせるのでしょうか??
いまいち良く分かってないですが、CGIとファイルの置く場所その他が出来あがったので、
何とかなりそうです。ありがとうございました。これからも参考にするために。覗きに来させて
もらいます。忙しそうですが、頑張ってください。
>中田さん
IBMが使っているサンプルスクリプトってGIFを加工しているんですよね。。。。
特許の問題がないか問い合わせてみよう。。。。
まっすんさん、
昨日コメントすべきところでしたが抜けてしまいました。
前のコメントは Windows上の CGI を前提にしていました。
UNIX サーバでしたら、ぴゅあさんの言われる通り、パーミッションの問題だと思います。
ttt.bak 自体は書込みオープンでファイルがなければ作られるはずですから、おそらく $base で指定されたディレクトリのパーミッションが不適切なのでしょう。
HTTPサーバが nobody 権限で動く場合、$base で指定しているディレクトリのパーミッションは 777 である必要があります。そうでないと nobodyの権限ではファイルを作ることができません。
>まっすんさん
前にレスしたつもりが気のせいらしい。。。。
その文から考えてCGIが作っているファイルだと思います。
$baseに設定されているディレクトリguestが(正しい位置に)存在しないのではないでしょ
うか?
それとUNIXで使っているのですか?
だとするとパーミッション(書き込み許可)も関係しているのではないでしょうか。
Apacheにはサーバ自身にも別に設定があったような気も?
中田さん Res ありがとうございます。自分が使っているのは技術評論社から出ている、
ホームページ サンプルスクリプト 大全集 のゲストブックですが、まったくそのままサーバ
移しています・・・もちろん、読み取り専用は解除済みですが テンプファイルの ttt.bakと
言うファイルはありません (書き込んだ後に出るメッセージに出てくるファイル名)
サーバは、UNIXで一台丸々使っています。guest.cgiの中にある$tmpfile= "$base/ttt.bak";
と言う個所がありますが、そのためにttt.bakを開こうとするのだと思うのですが、ttt.bakと
言うファイルは存在しません。使用ファイルはindex.htm と guest.htm guest.cgi です
ttt.bakと言うファイルは自分で作るのでしょうか?それともCGIの中の処理によるものでしょうか? UNIXサーバを最近触り出したので全くの初心者ですが、1台丸々使ってますので設定なども変更OKの状態です。
まっすんさん、
一般的には、
(1)ファイルのパス指定がおかしい
(2)ファイルの属性が読み込み専用になっている
などが考えられます。
(1)のパス指定は、相対指定/絶対指定のいずれの場合も指定したところにそのファイルがないか、ファイル名が間違っている場合です。
(2)については、たとえばCD-ROMからコピーしてそのままだとファイルの属性は読み込み専用になります。プロパティで読み込み専用属性を解除しないと書込みできません。
どうしてもおかしい場合は、そのゲストブックがどこの何かを教えてください。
(自作の場合はスクリプトを送ってもらうしかありませんけど)
ゲストブックを設置したいのですが、設定がおかしいのか、表示されません。
入力が完了しましたと言う表示と (../guest/ttt.bak)が開けませんと言う表示が出ます。
guest.thmに移動して見ても書き込みされていませんが、考えられる原因は何でしょうか?