Html編碼(數字型)解碼

template<typename IN_TYPE>// IN_TYPE : std::string 或 std::wstring
std::wstring decodeHtml(const IN_TYPE &s)
{
	std::wstring sRet;
	std::wstring tmp;
	bool b1 = false;
	bool b2 = false;
	int nLen = s.size();
	for (int i = 0; i < nLen; ++i)
	{
		wchar_t c = s[i];
		if (!b1 && !b2 && c == '&')
		{
			b1 = true;
		}
		else if (!b2 && b1 && c == '#')
		{
			b2 = true;
		}
		else if (b1 && b2 && c >= '0' && c <= '9')
		{
			tmp += c;
		}
		else if (b1 && b2 && c == ';')
		{
			//decode
			int iEncodeNum = _wtoi(tmp.c_str());
			if ((iEncodeNum & 0xFFFF0000) == 0)
			{
				wchar_t wDecodeNum = static_cast<wchar_t>(iEncodeNum);
				sRet += wDecodeNum;
			}
			else
			{
				sRet += L"&#" + tmp + L";";
			}

			b1 = false;
			b2 = false;
			tmp = L"";
		}
		else if (b1 && b2)
		{
			sRet += L"&#" + tmp + c;
			b1 = false;
			b2 = false;
			tmp = L"";
		}
		else if (b1 && c != '#')
		{
			b1 = false;
			sRet += L"&";
			sRet += c;
		}
		else
		{
			sRet += c;
		}
	}
	if (b1 && b2)
		sRet += L"&#";
	else if (b1)
		sRet += L"&";
	sRet += tmp;

	return sRet;
}
std::wstring ws = decodeHtml<std::string>("123&#32321;123");
std::wstring ws = decodeHtml<std::wstring>(L"123&#32321;123");


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章