html%3c转译,[转]URL编码
URL编码
作者: Chandrasekhar Vuppalapati
翻译:eastvc
下载源代码
本文的目的是设计一个完成URL编码的C++类。在我曾经的项目中,我需要从VC++ 6.0应用程序中POST数据,而这些数据需要进行URL编码。我在MSDN中查找能根据提供的字符串生成URL编码的相关类或API,但我没有找到,因此我必须设计一个自己的URLEncode C++类。
URLEncoder.exe是一个使用URLEncode类的MFC对话框程序。
如何处理
一些特殊字符在Internet上传送是件棘手的事情, 经URL编码特殊处理,可以使所有字符安全地从Internet传送。
例如,回车的ASCII值是13,在发送FORM数据时候这就认为是一行数据的结束。
通常,所有应用程序采用HTTP或HTTPS协议在客户端和服务器端传送数据。服务器端从客户端接收数据有两种基本方法:
1、数据可以从HTTP头传送(COOKIES或作为FORM数据发送)
2、可以包含在URL中的查询部分
当数据包含在URL,它必须遵循URL语法进行编码。在WEB服务器端,数据自动解码。考虑一下下面的URL,哪个数据是作为查询参数。
例如:http://WebSite/ResourceName?Data=Data
WebSite是URL名称
ResourceName可以是ASP或Servlet名称
Data是需要发送的数据。如果MIME类型是Content-Type: application/x-www-form-urlencoded,则要求进行编码。
RFC 1738
RFC 1738指明了统一资源定位(URLs)中的字符应该是US-ASCII字符集的子集。这是受HTML的限制,另一方面,允许在文档中使用所有ISO- 8859-1(ISO-Latin)字符集。这将意味着在HTML FORM里POST的数据(或作为查询字串的一部分),所有HTML编码必须被编码。
ISO-8859-1 (ISO-Latin)字符集
在下表中,包含了完整的ISO-8859-1 (ISO-Latin)字符集,表格提供了每个字符范围(10进制),描述,实际值,十六进制值,HTML结果。某个范围中的字符是否安全。
Character range(decimal)
Type
Values
Safe/Unsafe
0-31
ASCII Control Characters
These characters are not printable
Unsafe
32-47
Reserved Characters
'' ''!?#$%&''()*+,-./
Unsafe
48-57
ASCII Characters and Numbers
0-9
Safe
58-64
Reserved Characters
:;<=>?@
Unsafe
65-90
ASCII Characters
A-Z
Safe
91-96
Reserved Characters
[\]^_`
Unsafe
97-122
ASCII Characters
a-z
Safe
123-126
Reserved Characters
{|}~
Unsafe
127
Control Characters
'' ''
Unsafe
128-255
Non-ASCII Characters
'' ''
Unsafe
所有不安全的ASCII字符都需要编码,例如,范围(32-47, 58-64, 91-96, 123-126)。
下表描述了这些字符为什么不安全。
Character
Unsafe Reason
Character Encode
"
Delimiters around URLs in free text
%3C
>
Delimiters around URLs in free text
%3E
.
Delimits URLs in some systems
%22
#
It is used in the World Wide Web and in other systems to delimit a URL from a fragment/anchor identifier that might follow it.
%23
{
Gateways and other transport agents are known to sometimes modify such characters
%7B
}
Gateways and other transport agents are known to sometimes modify such characters
%7D
|
Gateways and other transport agents are known to sometimes modify such characters
%7C
\
Gateways and other transport agents are known to sometimes modify such characters
%5C
^
Gateways and other transport agents are known to sometimes modify such characters
%5E
~
Gateways and other transport agents are known to sometimes modify such characters
%7E
[
Gateways and other transport agents are known to sometimes modify such characters
%5B
]
Gateways and other transport agents are known to sometimes modify such characters
%5D
`
Gateways and other transport agents are known to sometimes modify such characters
%60
+
Indicates a space (spaces cannot be used in a URL)
%20
/
Separates directories and subdirectories
%2F
?
Separates the actual URL and the parameters
%3F
&
Separator between parameters specified in the URL
%26
如何实现
字符的URL编码是将字符转换到8位16进制并在前面加上''%''前缀。例如,US-ASCII字符集中空格是10进制
的32或16进制的20,因此,URL编码是%20。
URLEncode: URLEncode是一个C++类,来实现字符串的URL编码。CURLEncode类包含如下函数:
isUnsafeString
decToHex
convert
URLEncode
URLEncode()函数完成编码过程,URLEncode检查每个字符,看是否安全。如果不安全将用%16进制值进行转换并添加
到原始字符串中。
代码片断:
class CURLEncode
{
private:
static CString csUnsafeString;
CString (char num, int radix);
bool isUnsafe(char compareChar);
CString convert(char val);
public:
CURLEncode() { };
virtual ~CURLEncode() { };
CString (CString vData);
};
bool CURLEncode::isUnsafe(char compareChar)
{
bool bcharfound = false;
char tmpsafeChar;
int m_strLen = 0;
m_strLen = csUnsafeString.GetLength();
for(int ichar_pos = 0; ichar_pos < m_strLen ;ichar_pos++)
{
tmpsafeChar = csUnsafeString.GetAt(ichar_pos);
if(tmpsafeChar == compareChar)
{
bcharfound = true;
break;
}
}
int char_ascii_value = 0;
//char_ascii_value = __toascii(compareChar);
char_ascii_value = (int) compareChar;
if(bcharfound == false && char_ascii_value > 32 &&
char_ascii_value < 123)
{
return false;
}
// found no unsafe chars, return false
else
{
return true;
}
return true;
}
CString CURLEncode::decToHex(char num, int radix)
{
int temp=0;
CString csTmp;
int num_char;
num_char = (int) num;
if (num_char < 0)
num_char = 256 + num_char;
while (num_char >= radix)
{
temp = num_char % radix;
num_char = (int)floor(num_char / radix);
csTmp = hexVals[temp];
}
csTmp += hexVals[num_char];
if(csTmp.GetLength() < 2)
{
csTmp += ''0'';
}
CString strdecToHex(csTmp);
// Reverse the String
strdecToHex.MakeReverse();
return strdecToHex;
}
CString CURLEncode::convert(char val)
{
CString csRet;
csRet += "%";
csRet += decToHex(val, 16);
return csRet;
}
参考:
URL编码: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm.
RFC 1866: The HTML 2.0 规范 (纯文本). 附录包含了字符表: http://www.rfc-editor.org/rfc/rfc1866.txt.
Web HTML 2.0 版本(RFC 1866) : http://www.w3.org/MarkUp/html-spec/html-spec_13.html.
The HTML 3.2 (Wilbur) 建议: http://www.w3.org/MarkUp/Wilbur/.
The HTML 4.0 建议: http://www.w3.org/TR/REC-html40/.
W3C HTML 国际化区域: http://www.w3.org/International/O-HTML.html.
posted on 2007-01-04 13:46 永遇乐 阅读(2141) 评论(3) 编辑 收藏 引用 所属分类: 网络
html%3c转译,[转]URL编码相关推荐
- %3c strong%3e html,模型绑定url编码的字符串mvc 3
我正在使用MVC 3模型绑定与JQuery序列化程序()编辑窗体中的某些数据.除非在我的数据中有一些'url-encoded'(不知道更好的术语)文本,否则所有的工作都很好.这些数据就在那里,因为我使 ...
- html中%3c%3e字符原样显示,整理HTML5中支持的URL编码与字符编码_html5教程技巧-H5教程...
URL 编码URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法. 这些字符包括: ASCII 控制字符 - 不宜打印的字符通常用于 ...
- php %3cphp用大括号表示,整理HTML5中支持的URL编码与字符编码_html5教程技巧
URL 编码URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法. 这些字符包括: ASCII 控制字符 - 不宜打印的字符通常用于 ...
- java中http解析url,java url 编码(解析http请求汉语言地址 )
java url 编码(解析http请求中文地址 ) 在近在做项目的过程中,由于客户那边服务器上提供的有很多中文结构目录.请求要的地址不能正常运行显示出来.下面来分享一下我对http协议处理请求中文的 ...
- HTML-参考手册: URL 编码
ylbtech-HTML-参考手册: URL 编码 1.返回顶部 1. HTML URL 编码 参考手册 URL 编码会将字符转换为可通过因特网传输的格式. URL - 统一资源定位器 Web 浏览器 ...
- 【转】C# 中文URL编码
正在研究一个程序,输入一个关键字,能够把这个关键字发送到Google,yahoo等搜索引擎,进行搜索,然后打开结果网页.原理很简单.比如在Google搜索China,搜索结果页面的URL就是& ...
- URL编码 - Java加密与安全
JAVA的URL编码我们先看看什么是编码?ASCII码就是一种编码,A的编码是16进制的0x41,字母B的编码是0x42,而中文的中是用Unicode编码,中就是0x4e2d,用UTF-8编码,需要3 ...
- html%3cform%3e不换行,HTML URL 编码
参考网址:http://www.w3schools.com/cn/tags/ref_urlencode.asp URL编码(URL encoding)的作用是将字符转化为可在因特网上安全传输的格式. ...
- HTML Url 编码(Encode 和 Url Decode)
URL 编码 - 从 %00 到 %8f ASCII Value URL-encode ASCII Value URL-encode ASCII Value URL-encode ? %00 0 %3 ...
- HTML URL 编码参考手册-------转载
一.基础知识点: web浏览器通过URL从WEB服务器请求页面. 在线URL编码解码工具-UrlEncode编码-UrlDecode解码在线工具 二.URL编码作用: 1.URL编码将字符转换为可通过 ...
最新文章
- java nio 写事件_Java NIO
- Visual Studio Code 打开程序文件中文乱码解决方法
- 如何与Ubuntu One同步配置文件
- libz mysql_Docker和Mysql:libz.so.1:无法打开共享对象文件:权限被拒绝
- WordPress图片插件:Auto Highslide修改版(转)
- Java 如何使用protobuf
- 2021 年网易云音乐实时计算平台发展和挑战
- Verilog中的按键消抖
- js金额小写转换成大写
- oracle 12c pdb数据库全库备份
- Spring Boot实现QQ邮件发送,用户注册功能——前后端分离版
- 神经网络(二)—— 神经元、Logistic回归模型
- 降噪提升动漫图片,人物照片等图片画质(分享)
- sass、scss、和css的关系
- \int_0^{+\infty} \frac{\sin x}{x}\mathop{}\!\mathrm{d}{x}
- 分销商城怎样设计分销体系以及会员成长体系_OctShop
- vue学习笔记 DAY1 P1~P6
- 电脑连接了网络却打不开网页
- C# StreamRead和StreamWrite
- Redis基础、超详细入门教程
热门文章
- 编程语言新宠儿——Julia诞生记(转)
- 何为领导力 —— 《Working Backwards》书评
- 他用代码卖手机,卖出年流水上亿
- 蚂蚁金服研究员何征宇:系统软件和开源都是手段,不是目的
- 阿里云郑晓:浅谈GPU虚拟化技术(第四章)
- 【回归预测】基于matlab麻雀算法优化LSSVM回归预测【含Matlab源码 1128期】
- 【钟表识别】基于matlab GUI形态学钟表识别【含Matlab源码 1351期】
- 【优化算法】孪生支持向量机(TWSVM)【含Matlab源码 1257期】
- 【DCVRP】基于matlab蚁群算法求解带容量+距离的车辆路径规划问题【含Matlab源码 1038期】
- 【图像处理】基于matlab分形插值算法调换图片【含Matlab源码 197期】