&について教えてください

[上に] [前に] [次に]
インゲン豆 2000/01/21(金) 14:04:44
<a href="test.cgi?a=1&b=1">テスト</a>
の場合も
<a href="test.cgi?a=1&amp;b=1">テスト</a>
と書かなくてはいけないんですか?

初級者 2000/01/21(金) 14:33:04
必要ないと思います。
&amp;はブラウザに'&'そのものを表示するときに使用します。

WWWの鉄人 2000/01/21(金) 15:02:41
URIはSGML的にはCDATAに属するので、&のままで大丈夫です。

EMI 2000/01/21(金) 15:05:12
だめです。&amp;と書かなくてはいけません。
<a href="test.cgi?test=aaa&copy=bbb&lt=ccc">テスト</a>
などとしたとき、どうなると思いますか?

通りがかり 2000/01/21(金) 15:06:44
あれ?
それだと逆にエラーになりますよ。
&でいいと思いますが???

EMI 2000/01/21(金) 15:08:45
また、たとえば下のように書いた場合、
<a href="test.cgi?aaa=aaa&data=data">テスト</a>
今はよくても将来&data;という実体参照ができたとしたらどうでしょう?
そんなわけで、HTML中に存在する&はそれが実体参照を示すものでない限り必ず&amp;に置き換えなくてはなりません。

EMI 2000/01/21(金) 15:13:58
>通りがかりさん
どうも、入れ違いになったようですね。
それはいいのですが、言ってることの意味が分かりません。

とりあえず、参考。
http://homepage1.nifty.com/bakera/banner/zakkan.html

通りがかり 2000/01/21(金) 15:19:32
普通のHTMLを表示するならば、&では逆にエラーになりかねますが、
私もCGIを作っていますが、CGIの場合、データーを引き渡すので、
逆に正常にCGIへデータが送信されないようです。

ということでした。

ふじ 2000/01/21(金) 15:19:39
><a href="test.cgi?test=aaa&copy=bbb&lt=ccc">テスト</a>
<a href="test.cgi?test=aaa&copy;=bbb&lt;=ccc">テスト</a>
こうでは?>EMIさん

このように書くと、例えばCGIの引数として
test=aaa
copy;=bbb
lt;=ccc
という値を渡したくても、ブラウザが実際に送信するURLが

http://hoge/test.cgi?test=aaa(C)=bbb<=ccc

となって、& がデータの区切りとして扱われなくなります。

http://openlab.ring.gr.jp/k16/htmllint/explain.html#bad-entity

ふじ 2000/01/21(金) 15:23:22
><a href="test.cgi?test=aaa&copy;=bbb&lt;=ccc">テスト</a>
>こうでは?>EMIさん
失礼。EMIさんの最初の例でも同じでした。

WWWの鉄人 2000/01/21(金) 15:26:02
さっと仕様書を読んでそのまま書いてしまったのですが、考えてみると確かにEMIさんの言う通りですね。
でも、EMIさんのリンク先の別のページにはやっぱりURIはCDATA型と書いてある・・・(^^;
それとも「*cgi?」以降はRCDATAなのかな?
ちょっと調べてみます・・・

さくらいゆずる 2000/01/21(金) 15:27:09
../199909/99090169.htm
と同じ話ですね。

EMI 2000/01/21(金) 15:27:24
>ふじさん
ブラウザの問題です。
IEやNNでは;がなくてもあるかのように扱われてしまうんです。
また、仕様上も'='などの実体参照に使えない文字が現れるとその場で
実体参照として解釈されたはずだと記憶してます。
詳しい話は、参考で示したリソースを参照してください。

さくらいゆずる 2000/01/21(金) 15:28:01
のたのたしてたらかぶってしまった・・・(^^;;。

EMI 2000/01/21(金) 15:28:23
遅れた‥‥‥というか、ログの進むスピードが速い。(^^;

通りがかり 2000/01/21(金) 15:42:50
というか、CGIですよね?
そもそも何で、データーを渡す必要があるのでしょうか?
また、調べたところCGIによってデコード方法が違うので、
それぞれ違うそうです。
ちなみに私のCGIでは&が正解でした。
以上

EMI 2000/01/21(金) 15:54:24
だから、&でも動く場合もありますが、&amp;なら必ず動きます。
正解といってますが、&amp;でエラーでも出たんですか?

通りがかり 2000/01/21(金) 16:08:05
そうです。
どうやら、bbs.cgi?a=1&b=2等が、bbs.cgi?a=1&amp;=b+2等、少しわかりやすく言えばそんな感じです。

では。

めそ 2000/01/21(金) 16:08:28
ついでにお聞きしますが、非表示の場合、たとえば
<META HTTP-EQUIV="Refresh" CONTENT="40;URL=aaa.cgi?a=1&b=2">
とか、滅多にやらないと思うけど
<LINK REL="atylesheet" TYPE="text/css" HREF="aaa.cgi?a=1&b=2" ・・・>
の場合はどうなるのでしょうか?

EMI 2000/01/21(金) 16:20:36
>通りがかりさん
全然わかりやすくないんですが。
そう解釈されるとかそういう意味ですか?
URL中の&amp;がどう解釈されるかはWWWブラウザの問題でCGIの仕様は関係ないんですけど。
聞きたいんですが、通りがかりさんの使用しているOSとブラウザはなんですか?

>めそさん
非表示の意味が分かりませんが、すべての&は&amp;に置き換える必要があります。

#ところで、後者はCSSファイルを動的に生成するってことですか?
#なかなか、興味深いな。My Yahooみたいなものでしょうか?(いや、よく知らないけど)

Syn [E-Mail] 2000/01/21(金) 16:21:37
通りすがりさん>
> どうやら、bbs.cgi?a=1&b=2等が、bbs.cgi?a=1&amp;=b+2等、少し
> わかりやすく言えばそんな感じです。

それだと a=1 と =b+2 になりませんか?
bbs.cgi?a=1&amp;b=2 でしょう。

ちなみにいまわたしがリアルタイムで書いているウェブアプリ
では &amp; で IE ・ NN ともに正常に動いています。

めそさん>
> <META HTTP-EQUIV="Refresh" CONTENT="40;URL=aaa.cgi?a=1&b=2">
> とか、滅多にやらないと思うけど
> <LINK REL="atylesheet" TYPE="text/css" HREF="aaa.cgi?a=1&b=2" ・・・>
> の場合はどうなるのでしょうか?

同じです。
けっきょく、引用符中でも > なんかが出てきちゃうとマズイわけ
で、そーゆー部分には文字参照を使わなければなりません。

Syn [E-Mail] 2000/01/21(金) 16:22:54
文字参照じゃなく、実体参照でした(^_^;

通りがかり 2000/01/21(金) 16:27:53
IE5ですよ。

&amp;がデータとして、認識されてしまうということです。

Syn [E-Mail] 2000/01/21(金) 16:56:48
ひょっとしてもしかしてですが、 [アドレス] 欄に &amp; で
書いてませんか?
もしそうなら、当然データとして送信されます。
あくまでも HTML 文書中の <a href= 〜 > で、ですよ。

EMI 2000/01/21(金) 17:22:11
俺もそう思いました。>Synさん

もし違うんなら、どんなCGIにどんな書き方をしてどんなデータがわたったかを具体的に教えてください。>通りがかりさん

アドレスバーに書くときは、&amp;と書く必要はありません。
(というか、そう要求している場合を除き書いちゃいけません)

チャペル 2000/01/21(金) 17:51:51
少し会話がギスギスしています。
この雰囲気では、最初の質問者の方が入りづらいですよ。(^。^)”

EMI 2000/01/21(金) 18:04:01
ギスギスしてますか?
俺としては、単に通りがかりさんのエラーの原因を知りたかっただけなのですが。

まぁ、確かに多少言い方がきつかった気はします。
以後、気をつけます。

通りがかり 2000/01/21(金) 18:09:18
チャペルさん>
私もそう思います。

アドレスバーに入力してもしょうがないと思いますが(^^;
アドレスバーのことではありませんよ。

EMI 2000/01/21(金) 18:45:37
>通りがかりさん
ならば、
>もし違うんなら、どんなCGIにどんな書き方をしてどんなデータがわたったかを具体的に教えてください。>通りがかりさん
この質問に答えてほしいのですが。

moci 2000/01/21(金) 18:57:14
WindowsNT4.0ですが、IE5.0で"&amp;"はちゃんと"&"になってましたよ。
バージョン情報では5.00.2314.1003になってました。
通りがかりさんのIE5とは細かいバージョンが違うのかな?

通りがかり 2000/01/21(金) 18:58:30
あぁ、それは一寸。
なぜかというと、荒らし対策のためのCGIとして使っているので、使用方法は秘密ですが、
どんなCGIというと、とほほさんのperl.txtを参考にさせていただきました。
そこの$FORM{'***'}を使っています。
では。

通りがかり 2000/01/21(金) 18:59:59
>mociさんへ
おぉ、そうらしいです。
2回も入れたのですが両方とも違うようです。
mociさんのとも・・・

EMI 2000/01/21(金) 19:41:22
IEの細かいバージョンの違いに依るデグレでしょうか?
ちなみに、俺の今の環境もNT4.0の5.00.2314.1003です。

ところで、参考で示したページの例はどのように表示されましたか?

通りがかり 2000/01/21(金) 20:01:44
そうですか。
私のがEMIさんmociさんよりも最新のバージョンみたいですね<IE5

> EMIさん
「参考で示したページ...」というのはなんでしょう?

EMI 2000/01/21(金) 20:05:55
これは失礼、これです。
http://homepage1.nifty.com/bakera/banner/zakkan.html

通りがかり 2000/01/21(金) 20:52:09
http://hpcgi1.nifty.com/bakera/dummy.cgi?gt=1<=2c=3
と表示されました。

moci 2000/01/21(金) 21:17:21
> 私のがEMIさんmociさんよりも最新のバージョンみたいですね<IE5
だけじゃなくて、どのOS上とか、せめて番号いくつかは書いてください。
http://www.microsoft.com/japan/support/kb/articles/J051/6/55.htm
を見る限り、5.00.2314.1003より新しいビルド番号なのは2つだけのようで、
もしWindows98SE付属のものなら、5.01で修正されているかもしれません。
# Windows2000付属の、という話もあるかな?

EMI 2000/01/21(金) 21:34:16
http://hpcgi1.nifty.com/bakera/dummy.cgi?gt=1<=2c=3
>と表示されました。

思いっきり期待通り表示されてますね。
じゃあ、件のCGIがうまく動かないわけはなんでしょう?
#やっぱりデグレ?

通りがかり 2000/01/21(金) 23:36:08
やはりCGIの処理系によるようです。
私のホームページの広告では、&を使っていますよ。
$amp;とは使われていません。
それでちゃんと表示できるんです。
また、|でも代用できると、書いてありました。

私の結論としては、
& or &amp; はCGIのデコード処理系によるものだと考えました。

では。

moci 2000/01/22(土) 00:29:41
> それでちゃんと表示できるんです。

現に「http://hpcgi1.nifty.com/bakera/dummy.cgi?gt=1<=2c=3」となった以上、
ちゃんと表示できないケースがあることは間違いありません。

> また、|でも代用できると、書いてありました。

その場合には、「|」に対応したCGIを用意しなければなりません。

> & or &amp; はCGIのデコード処理系によるものだと考えました。

最初にそう考えたというのならともかく、これだけいろいろやって
なぜ間違いだということに気付かないのでしょう…

とほほ 2000/01/22(土) 01:42:21
> & or &amp; はCGIのデコード処理系によるものだと考えました。
HTML2.0やHTML4.0の規約に従うとすれば、やはり、URLの中でも & を
&amp;と書かなくてはならないのは事実のようです。
(私もうっかりしていたので、修正しなくちゃ。)

> 私のホームページの広告では、&を使っていますよ。
& のままで使っている人もいるし、
たまたまそれで動いている場合もあるし、
test.cgi?aaa=1&amp=2 ってなことをやると、(; が抜けていても)
実際、IEやNNでは、&amp が & と解釈されて CGI に渡されちゃうし、
逆に、&amp; を & に変換するのを忘れてそのまま送信しちゃう、仕様
違反のブラウザがいるかもしれないし・・・
そんなところじゃないですかね。

とりあえず、このトピックの質問に対する回答は出たと思いますので、
このへんでお開きにしましょう・・・・(^^;)

チャペル 2000/01/24(月) 18:29:03
[[解決]]
解決済みですね。

[上に] [前に] [次に]