VFPCGI Day12

出自VFP Wiki

跳轉到: 導航, 搜尋
VFPCGI的第十二天

既然已經有了 UrlDecode 這個函數,我們再回頭來看 cgi06。

首先我們修改 Request 類別的 ParseData 方法

	HIDDEN PROCEDURE ParseData
		LPARAMETERS cInput as String , oCollection as Collection 
		LOCAL i, nStart, nPos, nEqualPos
		LOCAL lcStr, lcKey, lcValue 
		
		* parse it.
		i = 1
		nStart = 1
		nPos=AT( "&", cInput, i )
		IF nPos == 0 THEN 
			nPos = LEN( cInput )
		ENDIF 
		DO WHILE nPos!=0
			lcStr = SUBSTR( cInput, nStart, nPos-nStart )
			nEqualPos = AT( "=", lcStr )
			IF nEqualPos!=0 THEN 
				lcKey = SUBSTR( lcStr, 1, nEqualPos-1 )
				lcValue = UrlDecode( SUBSTR( lcStr, nEqualPos+1 ) )
				oCollection.Add( lcValue, lcKey )
			ENDIF 
			i=i+1
			nStart = nPos + 1
			nPos=AT( "&", cInput, i )
		ENDDO 
		IF nStart < LEN(cInput) THEN 
			nPos = LEN( cInput )
			lcStr = SUBSTR( cInput, nStart )
			nEqualPos = AT( "=", lcStr )
			IF nEqualPos!=0 THEN 
				lcKey = SUBSTR( lcStr, 1, nEqualPos-1 )
				lcValue = UrlDecode( SUBSTR( lcStr, nEqualPos+1 ) )
				oCollection.Add( lcValue, lcKey )
			ENDIF 
		ENDIF 
	ENDPROC 

基本上只修改兩行,用 UrlDecode 來處理 lcValue

lcValue = UrlDecode( SUBSTR( lcStr, nEqualPos+1 ) )
接著將 cgi06 最上面的
set procedure to cgilib
改為
set procedure to cgilib, httputility

編譯以後再執行看看,相信就已經可以處理中文了。 但是,我們還沒講到 unicode 與網頁編碼問題的部份...冏...

p.s. 之前有人問 Apache 的部份,我猜想可能是 Apache 設定裡面的 AddDefaultCharset 沒有註解掉的原因~ 如果沒有註解掉,Apache 都會假定網頁編碼是 utf-8。