gpt4 book ai didi

FoxPro 中的 URLEncode

转载 作者:行者123 更新时间:2023-12-01 23:07:39 26 4
gpt4 key购买 nike

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

最佳答案

这是一个可以满足您需要的纯 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 的回退 - 如果您使用任何西风工具(西风客户端工具或 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 表单变量,请使用上面的例程。

关于FoxPro 中的 URLEncode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com