Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FoxPro中的URLEncode_Url_Encode_Visual Foxpro_Foxpro - Fatal编程技术网

FoxPro中的URLEncode

FoxPro中的URLEncode,url,encode,visual-foxpro,foxpro,Url,Encode,Visual Foxpro,Foxpro,我无法很快找到谷歌的答案,而且我面前也没有帮助(说来话长),因此,我的问题是:在MS Visual FoxPro 8中,有没有一种简单的URL编码字符串的方法 urlEncode函数可能正是您所需要的。此外,请查看清单3,它与我使用的非常接近。这里有一个纯FoxPro函数,可以满足您的需要: ******************************************************** FUNCTION URLEncode ***************

我无法很快找到谷歌的答案,而且我面前也没有帮助(说来话长),因此,我的问题是:在MS Visual FoxPro 8中,有没有一种简单的URL编码字符串的方法
urlEncode函数可能正是您所需要的。

此外,请查看清单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,如果不只是删除该代码块的话。对于较大的缓冲区(比如编码后缓冲区),Fox代码例程可能会变慢,因此需要回退到DLL来提供此功能

另一个选项是,如果您仅编码URL(而不是POST缓冲区HTTP POST操作),则可以在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进行编码,请使用此选项。如果要对HTTP表单变量进行URL编码,请使用上面的例程