URLEncode в FoxPro - PullRequest
       6

URLEncode в FoxPro

2 голосов
/ 17 июня 2010

Я не смог быстро найти ответ Google, и у меня нет помощи передо мной (длинная история), поэтому мой вопрос: есть ли простой способ URL-кодирования строки в MS VisualFoxPro 8

Ответы [ 3 ]

3 голосов
/ 17 июня 2010

Посмотрите здесь: http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater Возможно, вам нужна функция urlEncode.

2 голосов
/ 09 апреля 2015

Вот чистая функция 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 для обеспечения этой функциональности.

Другой вариант, если вы только кодируете URL-адреса (а не POST-буферы HTTP POST-операций), вы можете использовать InternetCanonicalizeUrl API в 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 ""

Этот код быстрый, но очень мягкий в кодировке символов. По сути, он не кодирует какие-либо расширенные символы, которые могут или не могут быть важными для вас. Используйте это, если вы действительно только кодируете URL. Если вы используете переменные формы UrlEncoding HTTP, используйте приведенную выше процедуру.

1 голос
/ 04 марта 2011

Кроме того, посмотрите http://www.west -wind.com / Presentations / shellapi / shellapi.asp Листинг № 3 очень близок к тому, что я использую.

...