三河版i-modeCGI
1投稿者:名捨て人@深夜です  投稿日:2002/07/21(日)00:06:30
J-PHONEユーザーの遊歩です。
i-mode用の画面で新規投稿を試みると「リファラーエラーでいやん」と
跳ねられてしまいます。これには対処できないのでしょうか?

(確か、ざー2も同じような事象が起きたような・・・)
2投稿者:三河人  投稿日:2002/07/21(日)01:27:23
>遊歩人さん
私もJ−PHONEユーザーです。
今日買った新しい携帯で、初めてレスカキコしましたがリファラエラーは
出ませんでした。
一応、スクリプト上は、i-modeとj-phone対応をしているつもりなのですが…。
(リファラエラーとならないようにスクリプトでスキップしてる)
もしかして新規投稿の時だけエラーとなるのですかね?

ソースは公開してますので、気がついた方は指摘して下さい。
3投稿者:三河人  投稿日:2002/07/21(日)01:32:41
ちなみに今、J−PHONE携帯からこの新規スレを作ってました。
http://www.mikawaban.com/main2/020721013005.html [そーす]

問題なく作れたのですが…。
4投稿者:三河人  投稿日:2002/07/21(日)01:34:29
まさかとは思いますが、こちらから書いてますよね?
http://www.mikawaban.com/cgi-bin/i.cgi [そーす]
↑ここからカキコしないとエラーになります。
5投稿者:東京遊歩人  投稿日:2002/07/21(日)19:56:03
>>4のみかわじそさん
もちろん、そのURLからカキコしてるんですけど。。。
やっぱり「リファラーエラーいや〜ん」となってしまいます(新規スレのときだけ)
携帯のほうで設定する項目なんて無いですよね?
6投稿者:三河人  投稿日:2002/07/21(日)23:09:29
>遊歩人さん
>携帯のほうで設定する項目なんて無いですよね?
全然詳しくありませんが、携帯側の設定は特に不要かと。
リファラエラーになる原因は、携帯からの書き込み時に
リファラに「DoCoMo」か「j-phone」の文字が含まれていない時です。
ちなみに私が携帯から書き込みした場合は正しいリファラを
吐き出している為に問題無く書き込めていたのが理由でした。

念の為スクリプトを臨時修正して、リファラエラー時にリファラ内容を
表示するようにしました。
その時にどんな内容でエラーになったかここに書いてもらえますか?
7投稿者:東京遊歩人  投稿日:2002/07/22(月)17:25:47
三河人さんへ>

> その時にどんな内容でエラーになったかここに書いてもらえますか?

な、エラー内容を何も表示しません・・・(;´Д`)(;´Д`)(;´Д`)(;´Д`)(;´Д`)
8投稿者:三河人  投稿日:2002/07/22(月)17:40:55
>7の東京遊歩人さん
>な、エラー内容を何も表示しません・・・(;´Д`)(;´Д`)(;´Д`)(;´Д`)(;´Д`)

なんと!…困りましたな(笑)
つー事は、遊歩人さんの携帯からは「何もリファラ吐き出しが無い」と
ゆー事になる訳ですね。
てっきり、j-phoneやらi-modeからは何かしらのリファラを吐き出すものと
ばかり思ってました。
ちょっと…また考えてます…。どもでした。
9投稿者:三河人  投稿日:2002/07/23(火)00:02:53
…解りません!(笑)
10投稿者:名捨て人@深夜です  投稿日:2002/07/23(火)00:18:39
困りましたな・・・>みかわさん

えっと茶碗でテストしたら、ホストしか拾わないんですね。
リファラーが拾える掲示板ってあったっけ?

茶碗で拾ったホスト名
wgpproxytn0601.skyweb.jp-t.ne.jp
11投稿者:三河人  投稿日:2002/07/23(火)00:47:22
ん?ちょっとバカな質問かも知れませんが
「skyweb.jp-t.ne.jp」
これはj-phoneからカキコした時のリファラ(=携帯のリファラ)ですか?
それともスクリプトが設置されているホスト名ですか?
12投稿者:名捨て人@深夜です  投稿日:2002/07/23(火)00:58:43
>>11(みかわじそ)
携帯のリファラ(つーーか、ホスト名)だよん。
茶碗掲示板にカキコして拾ってみた。
13投稿者:三河人  投稿日:2002/07/23(火)01:01:34
>遊歩人さん
あれ?
>>7で何にも表示されなかったと言ってましたけど、茶碗だと拾われたって
事ですかね?
うーん、skyweb.jp-t.ne.jpが常に吐かれるのであれば対応が可能なんですけど。
14投稿者:三河人  投稿日:2002/07/23(火)01:04:06
なんか良く解らない気がするんですけど
ココ以外(例えばざー2)の板では新規スレ作成が可能なんですよね?
多分ざー2もココも、ゴンタくん作のCGIをベースに作ってると
思うので仕組みが同じだと思うのですが、なんでココはダメなのかな?
やっぱり仕組みが違うのかな?うーん…。
15投稿者:三河人  投稿日:2002/07/23(火)01:08:43
とりあえずワケが解らないまま、skyweb.jpをチェック対象にしてみました。
様子見。
16投稿者:東京遊歩人  投稿日:2002/07/23(火)03:22:26
>>14(みかわじそ)
ざー2は新規スレ立てられないよん(スクリプトのバグだね、ありゃ・・・)
携帯で新規スレが立てられるのはDoCoMoだけだとか言ってたよ。
17投稿者:三河人  投稿日:2002/07/23(火)12:12:19
>16の東京遊歩人さん
>ざー2は新規スレ立てられないよん(スクリプトのバグだね、ありゃ・・・)
>携帯で新規スレが立てられるのはDoCoMoだけだとか言ってたよ。

あ、そうでしたか。
という事は、DoCoMoからのリファラ吐き及びそれに伴う制御はOKと
ゆー事で。
18投稿者:三河人  投稿日:2002/08/06(火)00:26:39
なんかエラーが出るらしいですけど、よーわかりません。
とりあえずまた、リファラ内容とユーザ内容をエラー時に表示するように
しましたので、ココへその結果を書き込むかメールで教えていただけると
助かります。>エラーになった方
19投稿者:東京遊歩人@J-SH08ユーザー  投稿日:2002/08/06(火)11:52:37
リファラエラーいや〜ん
リファラ=
ユーザ名=J-PHONE/3.0/J-SH08
20投稿者:三河人  投稿日:2002/08/06(火)12:27:57
>遊歩人さん
情報どもです。
あれー?…なんでだろ?
スクリプトでは↓
-----
if($user !=~ /DoCoMo/i && $user !=~ /j-phone/i && $user !=~ /\.skyweb\.jp/i){
$referer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex(>遊歩人さん
情報どもです。
あれー?…なんでだろ?
スクリプトでは↓
-----
if($user !=~ /DoCoMo/i && $user !=~ /j-phone/i && $user !=~ /\.skyweb\.jp/i){
$referer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#$referer =~ /^$urlbasex([\w\.\-]+)/ || &error('リファラエラーいや〜ん');
$referer =~ /^$urlbasex([\w\.\-]+)/ || &error("リファラエラーいや〜ん<br>リファラ=$referer<br>ユーザ名=$user");
$folder = $1;
}
------
というように「j-phone」の文字(大文字小文字問わず)があれば
リファラチェックしないようにしているつもりなのですが…謎。))/eg;
#$referer =~ /^$urlbasex([\w\.\-]+)/ || &error('リファラエラーいや〜ん');
$referer =~ /^$urlbasex([\w\.\-]+)/ || &error("リファラエラーいや〜ん<br>リファラ=$referer<br>ユーザ名=$user");
$folder = >遊歩人さん
情報どもです。
あれー?…なんでだろ?
スクリプトでは↓
-----
if($user !=~ /DoCoMo/i && $user !=~ /j-phone/i && $user !=~ /\.skyweb\.jp/i){
$referer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
#$referer =~ /^$urlbasex([\w\.\-]+)/ || &error('リファラエラーいや〜ん');
$referer =~ /^$urlbasex([\w\.\-]+)/ || &error("リファラエラーいや〜ん<br>リファラ=$referer<br>ユーザ名=$user");
$folder = $1;
}
------
というように「j-phone」の文字(大文字小文字問わず)があれば
リファラチェックしないようにしているつもりなのですが…謎。;
}
------
というように「j-phone」の文字(大文字小文字問わず)があれば
リファラチェックしないようにしているつもりなのですが…謎。
21投稿者:三河人  投稿日:2002/08/07(水)00:33:10
うーん、$userに「J-PHONE/3.0/J-SH08」を突っ込んでみても
問題無く書き込めるのですけど。
「J-PHONE」の文字があるので問題無いはずですが。
22投稿者:東京遊歩人  投稿日:2002/08/07(水)01:24:20
>「J-PHONE」の文字があるので問題無いはずですが。

どちらかというと、私の携帯で「なぜリファラを吐き出さないのか」を
追求したほうがいいのかも。。。
23投稿者:三河人  投稿日:2002/08/07(水)01:41:04
>私の携帯で「なぜリファラを吐き出さないのか」を
>追求したほうがいいのかも。。。

機種によるのですかね。
私のはJ−T51ですけどリファラ吐き出すようです。
24投稿者:質問です。  投稿日:2004/07/30(金)12:27:34
三河版スクの
if($user !=~ /DoCoMo/i && $user !=~ /j-phone/i && $user !=~ /\.skyweb\.jp/i){
のところ、
if($user !~ /DoCoMo/i && $user !~ /j-phone/i){
じゃだめなんでしょうか?
すみませんが教えてくださいです。


25投稿者:三河人  投稿日:2004/07/30(金)12:35:37
>24さん
>if($user !~ /DoCoMo/i && $user !~ /j-phone/i){
これ、=(イコール)が抜けてると思いますが、それは多分間違いと
判断しまして、

>$user !=~ /\.skyweb\.jp/i
この↑指定が無くてもOKか?の意味ですよね?
であれば、問題無いと思います。(多分)
j-phoneユーザの対応でアレコレと試してた時に入れたままになってるだけじゃ
ないかな…?記憶が曖昧ですが。
無い状態でj-phoneユーザが見る事が出来ないようであれば、追加するなり
別の対応が必要でしょうね。

って、今はボーダフォンだけど問題ないんか?!(笑)
私はボーダフォン(旧j-phone)ユーザですけど見れるなあ。
26投稿者:24  投稿日:2004/07/30(金)23:39:49
早い返事ありがとうございます。
ボーダフォンのユーザーがリファラーのエラーが出て書き込めないといってましたので、
今回気になった部分を質問させてもらいました。
ありがとうございました。
27投稿者:三河人  投稿日:2004/08/02(月)02:00:20
まつながさんからの質問スレッド。
http://www.mikawaban.com/tera/040802010851.html
これについて考えていきたいと思います。

尚、まつながさんの了解はまだ取っていないのですが
このスレで上記について進めることにします。
28投稿者:三河人  投稿日:2004/08/02(月)02:00:47
えーと、UTF-8対応しないとどこまで化けてしまうのかが
私がわかってないのもいけないのですが、関連資料を探してきました。

1.jcode.plを使ってUTF-8変換する
参考URL「Jcodeを使おう(実用本位のJcode紹介) 」
http://www.netfort.gr.jp/~kiyoka/jcode_intro/
ここを見ますと、
>サポートする文字コード
>ascii,binary,euc,sjis,jis,ucs2,utf8
とあるのですが、(私が軽く探しただけですが)今出まわっている
jcode.plには、「euc,sjis,jis」しか対応していないようです。
多分ですが、未対応じゃないかと…。
対応していたら一番簡単そうだったのですが。


2.jcode.pl以外のモジュールを使ってUTF-8変換する
参考URL「Unicodeデコーダ「simaguni.pl」」
http://www2.famille.ne.jp/~akio1998/simaguni.html
i.cgiからの投稿の場合は、これを使えばいけるかも…。
以下、URL元より参考箇所を転載。
--------------------------------------------------------
(UTF-8) :
$s = $ENV{'QUERY_STRING'};
$s =~ tr/+/ /;
;# UTF-8を含むエンコードデータか否かを識別
if($s =~ m/%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}/){
;# 含まれている場合は simaguni.pl でデコード
require './simaguni.pl';
if(&simaguni'loadbook8()){
;# 'euc' 'sjis' 'jis' の何れかを指定
&simaguni'decode8(*s,'euc');
&simaguni'unloadbook8();
}
}else{
;# 含まれていない場合は jcode.pl 等をご利用下さい
(Decode program for Shift-Jis,EUC etc)
}
--------------------------------------------------------
29投稿者:三河人  投稿日:2004/08/02(月)02:08:40
まだ実際に調べてないので想像だけの例になりますが、
具体的な三河版スクリプトへの対処方法を「simaguni.pl」を用いた場合で
示してみます。

まず、三河版スクリプト(amezo.cgi)に以下のソース部分があります。
if($user !=~ /DoCoMo/i && $user !=~ /j-phone/i){
これによって、携帯ユーザ(UTF-8変換が必要)か否かが解ります。

もしくは、飲尿28のURL先で示すように
if($s =~ m/%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}%[eE][0-9a-fA-F]{1}%[0-9a-fA-F]{2}%[0-9a-fA-F]{2}/){
にてUTF-8変換すべきかを判断します。
三河版スクリプトにあてはめた場合、「$s」ではなくて「$value」となります。
30投稿者:三河人  投稿日:2004/08/02(月)02:14:20
次にどちらの場合でも同じ箇所になりますが、
&jcode'convert(*value,'sjis');
とある部分が現在shift-jis変換している場所ですので、これを

if(UTF-8変換とする時){
# 含まれている場合は simaguni.pl でデコード
require './simaguni.pl';
if(&simaguni'loadbook8()){
# 'euc' 'sjis' 'jis' の何れかを指定
&simaguni'decode8(*value,'sjis');
&simaguni'unloadbook8();
}
}else{
&jcode'convert(*value,'sjis');
}

という感じにすればいいんじゃないかと思います。
31投稿者:まつなが  投稿日:2004/08/02(月)06:34:20
今のperl(5.8以上)には、Jcode.pmの後継ともいえるEncodeが組み込まれてますので、これを利用してます。
とりあえず、utf-8の場合はjcode'conbertを全部「頃す」ことで稼働させてました。携帯ユーザ(UTF-8変換が必要)か否かが判明して、その場合にはEncodeを稼働させるというのでいけそうです。
32投稿者:まつなが  投稿日:2004/08/02(月)07:38:36
三河人さんの示してくださったのは、「UTFデータを日本語コードに」で、
今やろうとしてるのは「Shift-JISをUTF-8に」なので、
まるっきり反対でした(;´Д`)
33投稿者:まつなが  投稿日:2004/08/02(月)09:26:05
できました!
1:
use Encode;
を最初の方に記述
2:「#####保存用情報へ変換」の下の方、
$name = $form{'name'};
Encode::from_to($name, 'shiftjis', 'utf8') if $imode =~ /yes/;
$comm = $form{'comm'};
Encode::from_to($comm, 'shiftjis', 'utf8') if $imode =~ /yes/;
$subj = $form{'subj'};
Encode::from_to($subj, 'shiftjis', 'utf8') if $imode =~ /yes/;
というように追加。
34投稿者:まつなが  投稿日:2004/08/02(月)09:44:43
かなり苦労しました。つーか分かってみれば簡単。
まず、判別は「ユーザーエージェント」じゃなくて、「i.cgi」からの送信の場合で判別したい。つまりi.cgiからPCで投稿することも想定したい。
よくみるとi.cgiには$imode=yesというデータを隠れて送信している。これを利用するしかない。
元のamezo.cgiにある「&jcode'convert(*value,'sjis');」を単純にEncodeに置き換えるのでは判別ができない。というのは、この行ではまだ$imode=yesというデータが形成されていないから($form{$name} = $value;の行を待たねばならない)。
そこで、わかりやすく、フォームデータを普通の変数に置き換えた直後に、$imode=yesの場合のみEncodeでコード変換することにした。
35投稿者:まつなが  投稿日:2004/08/02(月)11:06:34
PCからだと投稿できるのに、i-mode携帯からだとなぜかリファラエラー。
いろいろ試したところ、>>25が原因でした。
つまり、携帯からの場合は、
> if($user !~ /DoCoMo/i && $user !~ /j-phone/i){
が正解で、
>if($user !=~ /DoCoMo/i && $user !=~ /j-phone/i){
だと動かないようなのです。PCだと大丈夫なのにね。
とりあえず、
if($user !~ /DoCoMo/i && $user !~ /J-PHONE/i && $user !=~ /UP\.Browser/i && $user !~ /ASTEL/i){
としてみました。入れすぎ。わらい。
36投稿者:三河人  投稿日:2004/08/02(月)12:31:58
うーむ、結局私は役に立たず、
むしろ、まつながさんを引っ掻き回した感じがします(笑)

> if($user !~ /DoCoMo/i && $user !~ /j-phone/i){
それにしてもコレが謎です。
コレでうまくいってるようですから問題は無いのですが…?
37投稿者:松永  投稿日:2004/08/02(月)20:06:48
つーか、今『独習Perl』を借りてきたんですが、関係演算子として
=~
!~
は載ってますが、!=~はないですねえ。
というか、Perlの書籍、今初めて見た(わらい)
部分的改造で必要なとこだけネットで調べてくるという付け焼き刃的改造者ではいけませんなあ>自分
38投稿者:松永  投稿日:2004/08/02(月)23:12:57
現時点で、i-mode、FOMA、vodafone、auで表示・投稿に成功したことを確認
39投稿者:三河人  投稿日:2004/08/03(火)01:10:08
実は私もPerl本は滅多に見た事がなくて、カンで今までこなしていたという罠。

なんにせよ、まつながさんお疲れ様&成功おめでたうございます。
足引っ張ってすいませんでした(笑)
40投稿者:偽三河人?  投稿日:2004/10/12(火)01:27:15
テスト
41投稿者:名捨て人  投稿日:2005/05/23(月)17:07:04
あの…i.cgiはどうすればいいのですか…
42投稿者:三河人  投稿日:2005/05/23(月)19:43:12
>41の名捨て人さん
>あの…i.cgiはどうすればいいのですか…

ん?この意味は、
1.i.cgiはどこから入手すれば良いのですか?
2.i.cgiはどこに・どのように設置すれば良いのですか?
のどちらの意味ですか?
43投稿者:41  投稿日:2005/05/28(土)10:47:12
1です。
44投稿者:三河人  投稿日:2005/05/28(土)14:19:30
>41さん
三河版の「i.cgi」は公開していません。
「@すく」のreadme.txtにも書いている通り、
>i.cgiは、ゴンタくん作「i.cgi」を参考に作成して下さい。
にて入手して下さい。又は、an-donutさんで類似のi.cgiを公開
していると思いますので、そちらから入手して下さい。
投稿者 メール

新着レス レス全部を見る 掲示板に戻る 上へ