- 締切済み
フラグメント付きデータの受け取り方について?
ApacheからPerlのCGIを以下の様に呼び出しています。 ~/cgi-bin/abc.pl?URI=/test/start.html#5000 呼び出したPerl側で$ENV{'QUERY_STRING'}を使用して、 ?以降のデータ部分を取り出すと、 URI=/test/start.html となってしまい「#5000」が欠落してしまいます。 「#5000」以下を欠落しなくする方法をご存じの方、 教えて頂けないでしょうか? 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- steel_gray
- ベストアンサー率66% (1052/1578)
回答No.2
#1です。Apacheでの、とかあまり難しく考えないで、 ~/cgi-bin/abc.pl?URI=%2ftest%2fstart%2ehtml%235000 で大丈夫だと思います。(*) CGIがデコード処理をサボっていると、CGIを改造しないといけませんが * 適当に「エンコード」で検索したページで変換しました。 http://www.tagindex.com/tool/url.html
- steel_gray
- ベストアンサー率66% (1052/1578)
回答No.1
「#」をエンコードしておく。 Perlに渡す時点ではフラグメントではなくクエリなので英数字と一部記号を除いてURLエンコードしておかないと。
質問者
お礼
steel_gray様 教えて頂きありがとうございます。 Apacheでのエンコード方法を調べて試してみます。 結果については解り次第UPします。 ありがとうございました。
お礼
steel_gray様 教えて頂きありがとうございます。 "#"="%23"の変換で処理できました。 また、CGIのデコード処理についてもサボっていたので、 my $uri = $ENV{'QUERY_STRING'}; $uri =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; の様に修正しました。 Apacheの関数では出来ないのか、 もう少し調べてみます、何か解ったらUPします。 ありがとうございました。