2

グーグルの答えをすぐに見つけることができず、目の前に助けがないので(長い話)、私の質問は次のとおりです:MS VisualFoxPro8で文字列をURLエンコードする簡単な方法はありますか

4

3 に答える 3

3

ここを見てください: http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater urlEncode 関数は、あなたが探しているものかもしれません。

于 2010-06-17T17:03:02.910 に答える
3

必要なことを行う純粋な FoxPro 関数を次に示します。

    ********************************************************
    FUNCTION URLEncode
    *******************
    ***  Function: Encodes a string in URL encoded format
    ***            for use on URL strings or when passing a
    ***            POST buffer to wwIPStuff::HTTPGetEx
    ***      Pass: tcValue  -   String to encode
    ***    Return: URLEncoded string or ""
    ********************************************************
    LPARAMETER tcValue
    LOCAL lcResult, lcChar, lnSize, lnX

    *** Large Buffers use the wwIPStuff function 
    *** for quicker response
    if  LEN(tcValue) > 512
       lnSize=LEN(tcValue)
       tcValue=PADR(tcValue,lnSize * 3)

       DECLARE INTEGER VFPURLEncode ;
          IN WWIPSTUFF ;
          STRING @cText,;
          INTEGER cInputTextSize

       lnSize=VFPUrlEncode(@tcValue,lnSize)

       IF lnSize > 0
          RETURN SUBSTR(TRIM(tcValue),1,lnSize)
       ENDIF
       RETURN ""
    ENDIF   

    *** Do it in VFP Code
    lcResult=""

    FOR lnX=1 to len(tcValue)
       lcChar = SUBSTR(tcValue,lnX,1)
       DO CASE
       CASE ATC(lcChar,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~") > 0
          lcResult=lcResult + lcChar
       CASE lcChar=" "
          lcResult = lcResult + "%20"
       OTHERWISE
           *** Convert others to Hex equivalents
           lcResult = lcResult + "%" + RIGHT(transform(ASC(lcChar),"@0"),2)
       ENDCASE
    ENDFOR && lnX=1 to len(tcValue)

    RETURN lcResult
    * EOF URLEncode

大きなバッファーには wwipstuff.dll のフォールバックがあることに注意してください。West Wind ツール (West Wind Client Tools または WebConnection) を使用している場合、そのコード ブロックを削除するだけでなく、この DLL を使用できます。大きなバッファ (POST バッファのエンコードなど) の場合、Fox コード ルーチンが遅くなる可能性があるため、この機能を提供するために DLL にフォールバックします。

(POST バッファ HTTP POST 操作ではなく) URL のみをエンコードする場合の別のオプションは、Windows で InternetCanonicalizeUrl API を使用できます。

*******************************************
FUNCTION UrlEncode(lcUrl)
*************************
DECLARE INTEGER InternetCanonicalizeUrl IN WinInet.DLL ;
   STRING url, STRING @buffer, INTEGER @size, intEGer flags 

lnSize = LEN(lcUrl) *3
lcBuffer = REPL(" ",lnSize)
lnSize = LEN(lcBuffer)
lnFlags = 0 &&ICU_ENCODE_PERCENT 
if( InternetCanonicalizeUrl(lcUrl,@lcBuffer,@lnSize, lnFlags) == 0)
    RETURN ""
ENDIF   

IF lnSize > 0
   RETURN LEFT(lcBuffer,lnSize)
ENDIF

RETURN ""

このコードは高速ですが、文字エンコーディングが非常に緩いです。基本的に、重要な拡張文字はエンコードされません。実際に URL のみをエンコードする場合は、これを使用してください。UrlEncoding HTTP フォーム変数を使用している場合は、上記のルーチンを使用します。

于 2015-04-09T04:47:46.230 に答える
1

また、 http: //www.west-wind.com/presentations/shellapi/shellapi.aspもチェックしてください。 リスト 3 は、私が使用しているものに非常に近いものです。

于 2011-03-04T08:11:27.330 に答える