开发者

URLEncode in FoxPro

I couldn't quickly find a google answer, and I don't have the help in front of me (long story), so, my q开发者_运维知识库uestion is: Is there an easy way to URL-encode a string in MS Visual FoxPro 8


Here's a pure FoxPro function that does what you need:

    ********************************************************
    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

Note it has a fallback for wwipstuff.dll on larger buffers - if you're using any West Wind tools (West Wind Client Tools or WebConnection) you'll have this DLL if not just remove that block of code. For larger buffers (say encoding POST buffers) the Fox code routine can get slow hence the fallback to a DLL to provide this functionality.

Another option if you only encode URLs (rather than POST buffers HTTP POST operations) you can use the InternetCanonicalizeUrl API in Windows:

*******************************************
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 ""

This code is fast but it's very lenient in its character encoding. Basically it doesn't encode any extended characters which may or may not be important for you. Use this if you really are only encoding URLs. If you are UrlEncoding HTTP Form variables use the routine above.


Take a look here: http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater The urlEncode function might be what you're looking for.


Also, check out http://www.west-wind.com/presentations/shellapi/shellapi.asp Listing #3 is very close to what I use.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜