代码之家  ›  专栏  ›  技术社区  ›  Bozho

FoxPro中的URLEncode

  •  2
  • Bozho  · 技术社区  · 16 年前

    我不能很快找到一个google的答案,而且我面前也没有帮助(说来话长),所以,我的问题是:在msvisualfoxpro8中,有没有一种简单的方法对字符串进行URL编码

    3 回复  |  直到 11 年前
        1
  •  3
  •   Rick Strahl    11 年前

    下面是一个纯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客户端工具或WebConnection),您将拥有此dll,如果不只是删除该代码块的话。对于较大的缓冲区(比如编码后缓冲区),Fox代码例程可能会变得很慢,因此需要回退到DLL来提供此功能。

    *******************************************
    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进行编码,请使用此选项。如果要对HTTP表单变量进行UrlEncoding,请使用上面的例程。

        2
  •  3
  •   download    16 年前

    请看这里: http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater urlEncode函数可能就是您要查找的。

    推荐文章