![]() |
カレッヂ |
質問者 がおがお
投稿日 3/2(日) 16:51:10
log.cgiを改造して,HTTP_USER_AGENTのところで,Operaなどを拾う 要にしたいのですが, if ($HTTP_USER_AGENT =~ /(.+)\/(\d)\..*compatible\; MSIE (\d)\./) { $HTTP_USER_AGENT ="MSIE/$3 of $1/$2 compatible"; } elsif ($HTTP_USER_AGENT =~ /Mozilla\/(\d)\./) { $HTTP_USER_AGENT ="Mozilla/$1"; } に elsif ($HTTP_USER_AGENT =~ /Opera/(\d)\./) { $HTTP_USER_AGENT ="Opera/$1"; } を加えたのですが,認識がうまくいきません. 良い方法を教えてください.
プロバイダ参照:http://www.sakura.ad.jp/ |
回答者 しあわせのツボ
[削除]
投稿日 3/2(日) 19:10:16
「うまくいかない」とはどのような状況ですか? エラーになって動作しないのか、意図しない動作になってしまうのか、 動作はしているが変更が反映されないのか、など様々な状況が考えられ、 それによって答えも変わります。 質問する際は、期待する結果と現在との違いをできるだけ詳しく書くと 的確な回答がより素早くつくようになります。 まあ今回は見当がついたので。 現在あるブラウザの多くはMozilla/4.0で始まるUSER_AGENTを返します。 なのでそれより先に判定しないといけません。 |
質問者 がおがお
[削除]
投稿日 3/3(月) 13:17:33
しあわせのツボさん,即レスありがとうございます. また,説明不足な点をお詫びいたします. 仰るとおりで,Operaは Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.02 [ja] を返します.ですので,if文の先頭に以下の様に持っていったのですが, if ($HTTP_USER_AGENT =~ /Opera/(\d)\./) { $HTTP_USER_AGENT ="Opera/$1"; } elsif ($HTTP_USER_AGENT =~ /(.+)\/(\d)\..*compatible\; MSIE (\d)\./) { $HTTP_USER_AGENT ="MSIE/$3 of $1/$2 compatible"; } elsif ($HTTP_USER_AGENT =~ /Mozilla\/(\d)\./) { $HTTP_USER_AGENT ="Mozilla/$1"; } 動作しませんでした.そこで,昨日の命令の順序にしたのですが, やはりIE/5として判断されてしまいます. |
質問者 がおがお
[削除]
投稿日 3/3(月) 14:02:49
思考錯誤の末 if ($HTTP_USER_AGENT =~ /Opera (\d)\./) { $HTTP_USER_AGENT ="Opera/$1"; } elsif ($HTTP_USER_AGENT =~ /(.+)\/(\d)\..*compatible\; MSIE (\d)\./) { $HTTP_USER_AGENT ="MSIE/$3 of $1/$2 compatible"; } elsif ($HTTP_USER_AGENT =~ /Mozilla\/(\d)\./) { $HTTP_USER_AGENT ="Mozilla/$1"; } としたらOperaが認識できました. ありがとうございます. |
回答者 しあわせのツボ
[削除]
投稿日 3/3(月) 14:05:56
まず > if ($HTTP_USER_AGENT =~ /Opera/(\d)\./) { これ、本当に動作しましたか? if ($HTTP_USER_AGENT =~ /Opera\/(\d)\./) { としなければエラーが出ると思うのですが。 更に、Operaは > Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.02 [ja] と返しているのですから if ($HTTP_USER_AGENT =~ /Opera (\d)\./) { でないと認識しませんよね。 以上を確認してください。 |
質問者 がおがお
[削除]
投稿日 3/3(月) 14:16:28
しあわせのツボさん,ありがとうございました. 正常に,思ったように動作しました. これからもよろしくお願いします. |
このページは終了したので返信(回答)は書きこめません
Web裏技 |