#include<iostream> #include<stdio.h> #include<cstring> using namespace std; const char hexchars[] = "0123456789abcdef"; const char HEXCHARS[] = "0123456789ABCDEF"; int PHPhtoi(char *pszStr) { int iValue; int iChar; iChar = ((unsigned char *)pszStr)[0]; if (isupper(iChar)) iChar = tolower(iChar); iValue = (iChar >= '0' && iChar <= '9' ? iChar - '0' : iChar - 'a' + 10) * 16; iChar = ((unsigned char *)pszStr)[1]; if (isupper(iChar)) iChar = tolower(iChar); iValue += iChar >= '0' && iChar <= '9' ? iChar - '0' : iChar - 'a' + 10; return (iValue); } char * PHPUrlEncode(const char *pszBuff , int iLen , int* piNewLength) { register unsigned char uChar; unsigned char *pszTo, *pszStart; unsigned char const *pszFrom, *pszEnd; pszFrom = (unsigned char *)pszBuff; pszEnd = (unsigned char *)pszBuff + iLen; pszStart = pszTo = new unsigned char[3*iLen+1]; while (pszFrom < pszEnd) { uChar = *pszFrom++; if (uChar == ' ') { *pszTo++ = '+'; } else if ((uChar < '0' && uChar != '-' && uChar != '.') || (uChar < 'A' && uChar > '9') || (uChar > 'Z' && uChar < 'a' && uChar != '_') || (uChar > 'z')) { pszTo[0] = '%'; pszTo[1] = HEXCHARS[uChar >> 4]; pszTo[2] = HEXCHARS[uChar & 15]; pszTo += 3; } else { *pszTo++ = uChar; } } *pszTo = 0; if (piNewLength) { *piNewLength = pszTo - pszStart; } return (char *) pszStart; } int PHPUrlDecode(char *pszStr) { int iLen; char *pszDest = pszStr; char *pszData = pszStr; iLen=strlen(pszStr); while (iLen--) { if (*pszData == '+') { *pszDest = ' '; } else if (*pszData == '%' && iLen >= 2 && isxdigit((int) *(pszData + 1)) && isxdigit((int) *(pszData + 2))) { *pszDest = (char) PHPhtoi(pszData + 1); pszData += 2; iLen -= 2; } else { *pszDest = *pszData; } pszData++; pszDest++; } *pszDest = '\0'; return pszDest - pszStr; } int main() { char a[] = "wolike%1测试"; PHPUrlDecode(a); int blen = 0; char *b = PHPUrlEncode(a, strlen(a), &blen); cout << b << " " << blen << endl; }
C++实现urlencode/urldecode编码
猜你喜欢
转载自ciaos.iteye.com/blog/2250972
今日推荐
周排行