【问题标题】:URLEncode in FoxProFoxPro 中的 URL 编码
【发布时间】:2011-03-05 01:45:33
【问题描述】:

我无法快速找到谷歌答案,而且我面前没有帮助(长篇故事),所以,我的问题是:有没有一种简单的方法可以在 MS Visual 中对字符串进行 URL 编码FoxPro 8

【问题讨论】:

    标签: url encode visual-foxpro foxpro


    【解决方案1】:

    这是一个纯 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。对于较大的缓冲区(例如编码 POST 缓冲区),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 进行编码,请使用此选项。如果您是 UrlEncoding HTTP 表单变量,请使用上面的例程。

    【讨论】:

      【解决方案2】:

      看这里:http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater urlEncode 函数可能就是你要找的。​​p>

      【讨论】:

        【解决方案3】:

        另外,请查看http://www.west-wind.com/presentations/shellapi/shellapi.asp 清单 #3 与我使用的非常接近。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2010-10-10
          • 2012-06-02
          • 2014-12-25
          • 2012-02-12
          • 1970-01-01
          • 2022-06-22
          相关资源
          最近更新 更多