Olá!
Minha pergunta é: por que, no exemplo original,
...
Pois eu sei dessas funções por conta do uHttpd, de programas que fiz em (CGI) priscas eras, com Harbour.
Se não estou enganado tem Encode e Decode...
/contrib/hbhttpd/core.prg -> no 3.4 é diferente...Minhas andanças nos fontes.
Código: Selecionar todos
FUNCTION UHtmlEncode( cString )
LOCAL nI, cI, cRet := ""
FOR nI := 1 TO Len( cString )
cI := SubStr( cString, nI, 1 )
IF cI == "<"
cRet += "<"
ELSEIF cI == ">"
cRet += ">"
ELSEIF cI == "&"
cRet += "&"
ELSEIF cI == '"'
cRet += """
ELSE
cRet += cI
ENDIF
NEXT
RETURN cRet
FUNCTION UUrlEncode( cString )
LOCAL nI, cI, cRet := ""
FOR nI := 1 TO Len( cString )
cI := SubStr( cString, nI, 1 )
IF cI == " "
cRet += "+"
ELSEIF Asc( cI ) >= 127 .OR. Asc( cI ) <= 31 .OR. cI $ '=&%+'
cRet += "%" + hb_StrToHex( cI )
ELSE
cRet += cI
ENDIF
NEXT
RETURN cRet
FUNCTION UUrlDecode( cString )
LOCAL nI
cString := StrTran( cString, "+", " " )
nI := 1
DO WHILE nI <= Len( cString )
nI := hb_At( "%", cString, nI )
IF nI == 0
EXIT
ENDIF
IF Upper( SubStr( cString, nI + 1, 1 ) ) $ "0123456789ABCDEF" .AND. ;
Upper( SubStr( cString, nI + 2, 1 ) ) $ "0123456789ABCDEF"
cString := Stuff( cString, nI, 3, hb_HexToStr( SubStr( cString, nI + 1, 2 ) ) )
ENDIF
nI++
ENDDO
RETURN cString
Se não me falha a memória no mod_harbour tem umas dessas mais bem trabalhadas.(mais completas)
Saudações,
Itamar M. Lins Jr.