過去の桐井戸端BBS (桐ver.9) |
30859 | urlencodeのデータをurldecodeするための計算式はありますか | ts | 2005/08/10-23:06 |
tsと申します。 よろしくお願いします。 [環境:桐V9sp2 OS:w2kpro] さっそくですが、iisのログを桐に取り込む処理を考えておりますが、 取り込みデータにurlencode("%**" 形式)してあるデータがあり、そのまま取り込んだのでは 何がログとして出力されているかわからないため、これを桐でurldecode(2バイト文字)し 読める形式(項目)にしたいと考えています が、いろいろ試したのですが、うまくいきませんでした (項目計算式が上手く出来ませんでした。)。 本掲示版の諸先輩方々で、良い方法等ご存じの方がいらっしゃいましたら、 ヒント等お知恵を拝借できればと思います。 よろしくお願いいたします。 | |||
30867 | Re:urldecodeするための項目計算式について | hidetake | 2005/08/11-06:49 |
記事番号30859へのコメント UrlDecode は桐で作った事は無いですけれど UrlEncode は下記にあります。 http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=81#4044 ただし、「桐」での話ですので文字コードは Shift_JIS を前提にしてあります。 さて、tsさんは「桐」で UrlDecode をご希望のようですが、文字コードに 関しては、どのようにされるおつもりでしょう? UrlDecode する文字列の元の(UrlEncodeする前の)文字コードについてですが、 もし Decode した際に、その文字が Shift_JIS であれば「桐」で直接扱えるかも知れませんが、 それ以外の EUC-JP や ISO-2022-JP あるいは UTF-8 であったら?・・・ ログの UrlEncode された元の文字コードは HTTP_REFERER だったら、 元のページの文字コードで飛んでくる場合もあるでしょうが(最初からUrlEncodeされたリンクで飛んできた場合)、 UrlEcode してないリンクや、あるいはご自分のページでも日本語のファイル名がある場合は Mozilla 系は正しい 作法に基づき UTF-8 で Encode してアクセスしてきますので「桐」だと・・・ 桐で IIS のログを取り込むという事ですので、これは桐自身では直接は 出来ない事なので、何かのツールや外部スクリプトを使われるはずですが、 その段階で UrlDecode や文字コードの変換は行われた方が良いのでは無いかと思います。 | |||
30871 | Re:urldecodeするための項目計算式について | hidetake | 2005/08/11-07:33 |
記事番号30867へのコメント >桐で IIS のログを取り込むという事ですので、これは桐自身では直接は >出来ない事なので、何かのツールや外部スクリプトを使われるはずですが、 これは現在の状態のログも含めて持ってくる場合の事ですけれど、過去の分 (昨日以前)だけを対象にしていれば「桐」でも可能ですね。 (^^; いずれにせよ取り込む前の段階でフィルタを通した方が・・・ | |||
30876 | Re:urldecodeするための項目計算式について | hidetake | 2005/08/11-11:22 |
記事番号30871へのコメント >いずれにせよ取り込む前の段階でフィルタを通した方が・・・ まぁ〜無理矢理「桐」でやるとして、文字コードが Shift_JIS 前提で あれば次のような感じでいけるかな!? ざっと書いたので汚いけど :-) proc UrlDecode(str &Source, refer str &Result) cond (.not&Source) Return var long {&SourceLength, &i, &Hex} var str {&Str, &Str1, &Str2, &Str3, &Str4, &dStr} &SourceLength = #l(&Source), &Result=#u for &i = 1, &SourceLength, 1 &Str = #sstr(&Source, &i, 1) if (&Str = "+") &Result = &Result + " " else if ((&Str = "%") .and (&i+2 =< &SourceLength)) &Str1 = #sstr(&Source, &i+1, 1) \ ,&Str2 = #sstr(&Source, &i+2, 1) &Hex = #h(&Str1+&Str2) if ( (#h("00") <= &Hex .and &Hex <= #h("80")) \ .or (#h("A0") <= &Hex .and &Hex <= #h("DF"))) &dStr=#sj(&Hex) &Result = &Result + &dStr &i = &i + 2 else if ( (#h("81") <= &Hex .and &Hex <= #h("9F")) \ .or (#h("E0") <= &Hex .and &Hex <= #h("FF"))) if ( &i+5 =< &SourceLength \ .and #sstr(&Source, &i+3, 1) = "%") &Str3 = #sstr(&Source, &i+4, 1) \ ,&Str4 = #sstr(&Source, &i+5, 1) &Hex = #h(&Str1+&Str2+&Str3+&Str4) &dStr=#sj(&Hex) &Result = &Result + &dStr &i = &i + 5 else if (&i+3 =< &SourceLength) &Str3 = #str(#h(#sj(#sstr(&Source, &i+3, 1)))) &Hex = #h(&Str1+&Str2+&Str3) &dStr=#sj(&Hex) &Result = &Result + &dStr &i = &i + 3 else &Result = &Result + &Str + &Str1 + &Str2 &i = &i + 2 end else &Result = &Result + &Str + &Str1 + &Str2 &i = &i + 2 end else &Result = &Result + &Str end /* if */ end /* for */ end /*UrlDecode*/ | |||
30877 | Re:urldecodeするための項目計算式について | hidetake | 2005/08/11-11:36 |
記事番号30876へのコメント > UrlDecode URLエンコードする際に、たとえば「URLエンコード」と言う文字列を Shift_JIS で UrlEncode する場合も(Shift_JIS を使う場合は!) URL%83%47%83%93%83%52%81%5B%83%68 と変換するものもあれば URL%83G%83%93%83R%81%5B%83h と変換するものもあり デコードする際はこの両方のパターンにも対応しないといけないなど 面倒ですよね! :-) | |||
30880 | Re:urldecodeするための項目計算式について | うにん | 2005/08/11-12:55 |
記事番号30867へのコメント >桐で IIS のログを取り込むという事ですので、これは桐自身では直接は >出来ない事なので、何かのツールや外部スクリプトを使われるはずですが、 >その段階で UrlDecode や文字コードの変換は行われた方が良いのでは無い >かと思います。 Log Parserというのがあるようです。 http://www.microsoft.com/downloads/thankyou.aspx?familyId=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displayLang=ja | |||
30881 | Re:urldecodeするための項目計算式について | hidetake | 2005/08/11-14:21 |
記事番号30876へのコメント >proc UrlDecode(str &Source, refer str &Result) 「桐井戸端BBSを補完するために」の #183 にサンプルをあげておきました。 http://www.fuku3.com/~habata/cgi-bin/bbs1/clip.cgi http://www.fuku3.com/~habata/cgi-bin/bbs1/img/183.lzh | |||
30886 | Re:urldecodeするための項目計算式について | ts | 2005/08/11-21:32 |
記事番号30880へのコメント hidetake 様 うにん 様 res いただき有難うございます。 >>hidetake 様 183.lzh 有難うございます。 さっそく、試してみます。 有難うございました。 >>うにん 様 Log Parserの情報有難うございました。 このようなソフトが。MSより出ているとは知りませんでした。 貴重な情報提供有難うございました。 |