グーグルの答えをすぐに見つけることができず、目の前に助けがないので(長い話)、私の質問は次のとおりです:MS VisualFoxPro8で文字列をURLエンコードする簡単な方法はありますか
3 に答える
ここを見てください: http://fox.wikis.com/wc.dll?Wiki~GoogleTranslater urlEncode 関数は、あなたが探しているものかもしれません。
必要なことを行う純粋な 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 にフォールバックします。
(POST バッファ HTTP POST 操作ではなく) URL のみをエンコードする場合の別のオプションは、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 フォーム変数を使用している場合は、上記のルーチンを使用します。
また、 http: //www.west-wind.com/presentations/shellapi/shellapi.aspもチェックしてください。 リスト 3 は、私が使用しているものに非常に近いものです。