1. 程式人生 > >URLEncode和Decode演算法程式碼

URLEncode和Decode演算法程式碼

bool UrlEncode(const string& src, string& dst)
{
	if(src.size() == 0)
		return false;
	char hex[] = "0123456789ABCDEF";
    size_t size = src.size();
    for (size_t i = 0; i < size; ++i)
	{
		unsigned char cc = src[i];
		if (isascii(cc))
		{
			//程式碼這裡沒寫全,這裡只轉碼了空格 / & 這三個字元,實際應用的時候需要補全
			if (cc == ' ')
			{
				dst += "%20";
			}
			else if (cc == '/')
			{
				dst += "%2f";
			}
			else if (cc == '&')
			{
				dst += "%26";
			}
			else
				dst += cc;
		}
		else
		{
			unsigned char c = static_cast<unsigned char>(src[i]);
			dst += '%';
			dst += hex[c / 16];
			dst += hex[c % 16];
		}
	}
	return true;
}

bool UrlDecode(const string& src, string& dst)
{
	if(src.size() == 0)
		return false;
	int hex = 0;
	for (size_t i = 0; i < src.length(); ++i)
	{
		switch (src[i])
		{
			case '+':
				dst += ' ';
				break;
			case '%':
				{
					if (isxdigit(src[i + 1]) && isxdigit(src[i + 2]))
					{
						string hexStr = src.substr(i + 1, 2);
						hex = strtol(hexStr.c_str(), 0, 16);
						//字母和數字[0-9a-zA-Z]、一些特殊符號[$-_.+!*'(),] 、以及某些保留字[$&+,/:;
[email protected]
] //可以不經過編碼直接用於URL if (!((hex >= 48 && hex <= 57) || //0-9 (hex >=97 && hex <= 122) || //a-z (hex >=65 && hex <= 90) || //A-Z //一些特殊符號及保留字[$-_.+!*'(),] [$&+,/:;[email protected]] hex == 0x21 || hex == 0x24 || hex == 0x26 || hex == 0x27 || hex == 0x28 || hex == 0x29 || hex == 0x2a || hex == 0x2b|| hex == 0x2c || hex == 0x2d || hex == 0x2e || hex == 0x2f || hex == 0x3A || hex == 0x3B|| hex == 0x3D || hex == 0x3f || hex == 0x40 || hex == 0x5f )) { dst += char(hex); i += 2; } else dst += '%'; } else dst += '%'; } break; default: dst += src[i]; break; } } return true; }

相關推薦

URLEncodeDecode演算法程式碼

bool UrlEncode(const string& src, string& dst) { if(src.size() == 0) return false; char

JAVA冒泡演算法選擇演算法程式碼

import java.util.Random; import java.io.Serializable; import java.lang.Comparable; import java.util.Comparator; public class InnerSort {

機器學習演算法的基本原理-附PythonR語言程式碼

轉自:https://www.ziiai.com/blog/706 原文:https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/ 一般來說,有3種類型的機器學習演算法 1.監督學習

基於C++OpenCv的SIFT_影象區域性特徵檢測演算法程式碼的實現

SIFT:尺度不變特徵變換匹配演算法詳解 本章將要講解的內容如下所示:    1)SIFT演算法的簡介    2)SIFT演算法的實現細節    3)SIFT演算法的應用領域    4)SIFT演算法的改進與擴充套件 一 SIFT演算法的簡介   1)傳統的特徵提取方法 成

java CRC16演算法,分解一個大Key例項。各種hash演算法程式碼

package org.rui.hi;   /**   * 測試: 解決場景:把1億的使用者 儲存在一個佇列裡,過大。用sharding 摸擬redis 叢集 sharding Redis   * 叢集使用資料分片(sharding)而非一致性雜湊(consistency hashi

資料結構演算法程式碼實現——棧佇列(一)

棧和佇列 棧和佇列是一種特殊的線性表。 從資料結構角度看:棧和佇列也是線性表,其特點性在於棧和佇列的基本操作是線性表操作的子集。它們是操作受限的線性表。 從資料型別角度看:它們是和線性表不相同的兩類重要的抽象資料型別。 棧的定義 棧(Stack)是限

資源一:計算機視覺,機器學習方面的論文演算法程式碼

注:下面有project網站的大部分都有paper和相應的code。Code一般是C/C++或者Matlab程式碼。 最近一次更新:2013-1-29 一、特徵提取Feature Extraction:    PCA-SIFT [2] [Project]    Affine-SIFT [3] [Proje

K-meansK-means++演算法程式碼實現(Python)

K-means和K-means++主要區別在於,K-means++演算法選擇初始類中心時,儘可能選擇相距較遠的類中心,而K-means僅僅是隨機初始化類中心。 #K-means演算法 from pylab import * from numpy import * impo

計算機視覺,機器學習方面的論文演算法程式碼

最近一次更新:2013-1-29 一、特徵提取Feature Extraction:    PCA-SIFT [2] [Project]    Affine-SIFT [3] [Project]    Affine Covariant Features [5]

最小生成樹的Prim演算法Kruskal演算法java程式碼實現

MiniSpanTree中兩個靜態函式實現了最小生成樹的Prim演算法和Kruskal演算法: package datastucture; import java.util.ArrayList; import java.util.Arrays; import java.

python encodedecode函數說明

系統 格式 得到 enc utf-16 取消 div 一個 span 字符串編碼常用類型:utf-8,gb2312,cp936,gbk等。 python中,我們使用decode()和encode()來進行解碼和編碼 在python中,使用unicode類型作為編碼的基礎類型

urlencode()urldecode()

字符轉換 中文 字符 標識 pan 編碼 字符串 url 是把 urlencode()函數原理就是首先把中文字符轉換為十六進制,然後在每個字符前面加一個標識符%。一般用在url鏈接地址編碼urldecode()函數與urlencode()函數原理相反,用於解碼已編碼的 UR

python3 中encode decode的使用方法。

這就是 得到 網絡 code 報錯 方式 left 定義 () 編碼:   將文本轉換成字節流的過程。即Unicode----------->特定格式的編碼方式,產生特定的字節流保存在硬盤中(一般為utf-8格式)。 解碼:   將硬盤中的字節流轉換成文本的過程。即特

python的encodedecode誤讀總結

解析 font 計算機 理解 文本 str 無符號 出現 c中 python的encode和decode誤讀總結 最近在學Python,對編碼有個誤解的地方 下面是錯誤的理解: encode():編碼,將對象的編碼轉換為指定編碼格式,按照字面理解,一直以為

urllib模塊中parse函數中的urlencodequote_plus方法

生成 變化 嘗試 appid 微信 notify 固定 param reat 本來只是向看一下quote_plus的作用,然後發現urlencode方法也是很方便的一個組合字符串的方法首先是介紹一下urlencode,他是將一些傳入的元素使用&串聯起來,效果如下:

探究 encode decode 的使用問題(Python)

gbk nco com 程序 mage python 文件 height pre 很多時候在寫Python程序的時候都要在頭部添加這樣一行代碼 #coding: utf-8 或者是這樣 # -*- coding:utf-8 -*- 等等 這行代

Encode Decode

encode -h baidu blank www urldecode amp tar col Server.UrlDecode();Server.UrlEncode();是兩個成對的方法作用是在URL傳參時如果直接傳中文可能會出問題(對中文參數支持部完善),所以先用 S

case when decode 的比較分析

fault sig cas 相等 from 圖片 簡潔 oracl oracle數據 一、case when 與 if - else 類似,語句如下:CASE expr WHEN expr1 THEN return_expr1 [WHEN expr2 THE

資料庫分庫分表(sharding)系列(五) 一種支援自由規劃無須資料遷移修改路由程式碼的Sharding擴容方案(轉)...

作為一種資料儲存層面上的水平伸縮解決方案,資料庫Sharding技術由來已久,很多海量資料系統在其發展演進的歷程中都曾經歷過分庫分表的Sharding改造階段。簡單地說,Sharding就是將原來單一資料庫按照一定的規則進行切分,把資料分散到多臺物理機(我們稱之為Shard)上儲存,從

數獨問題的一種簡單演算法程式碼實現

五一期間無聊時想起去年考研複試有一道上機題目當時沒作出來,於是一時興起想重新拾起看看是當時太緊張,還是自己能力不足。然後發現這道題目還真稍微有些難度,相當於一道數獨問題(sudoku)的簡化版。自己想來想去也只能想到兩種演算法,一種是拿剩餘元素做全排列測試,一種是回溯法測試。最後只實現了一個全排