linux cpu占用率如何看
455
2022-10-25
本文目录一览:
是因为当字符串数据以url的形式传递给web服务器时,字符串中是不允许出现空格和特殊字符的
是因为URL规范中不支持中文和一些特殊符号作为参数与URL地址一起传递给WEB服务器,如果不使用urlencode进行编码后传递WEB服务器将不能识别,现在的浏览器会对表单中的中文字符在后台直接自动进行编码后传递
WCHAR* AnsiToUnicode(const char* buf)
{
int len = ::MultiByteToWideChar(CP_ACP, 0, buf, -1, NULL, 0);
if (len == 0) return L"";
::MultiByteToWideChar(CP_ACP, 0, buf, -1, wChar, len);
return wChar;
}
char* UnicodeToUtf8(const wchar_t* buf)
{
int len = ::WideCharToMultiByte(CP_UTF8, 0, buf, -1, NULL, 0, NULL, NULL);
if (len == 0) return "";
::WideCharToMultiByte(CP_UTF8, 0, buf, -1, utf, len, NULL, NULL);
return utf;
}
CString URLEncode(CString sIn)
{
CString sOut;
const int nLen = sIn.GetLength() + 1;
register LPBYTE pOutTmp = NULL;
LPBYTE pOutBuf = NULL;
register LPBYTE pInTmp = NULL;
LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
BYTE b = 0;
pOutBuf = (LPBYTE)sOut.GetBuffer(nLen*3 - 2);//new BYTE [nLen * 3];
if(pOutBuf)
{
pInTmp = pInBuf;
pOutTmp = pOutBuf;
while (*pInTmp)
{
char c = *pInTmp;
if (c0||c255)
{
*pOutTmp++ = '%';
*pOutTmp++ = toHex(*pInTmp4);
*pOutTmp++ = toHex(*pInTmp%16);
}
else if (isspace(*pInTmp))
{
*pOutTmp++ = '+';
}
else
{
*pOutTmp++ = *pInTmp;
}
pInTmp++;
}
*pOutTmp = '\0';
sOut.ReleaseBuffer();
}
sIn.ReleaseBuffer();
return sOut;
}
Cstring URL = ?
mkey=5338feeae7ee5787f=3c13p=.exe;
URL = UnicodeToUtf8(AnsiToUnicode(URL));
URL = URLEncode(URL);
URL 下载地址,有汉字也可以用
urlencode是一个函数,可将字符串以URL编码,用于编码处理。所以大多数语言都有urlencode。
URLENCODE和URLDECODE是比较常用的URL参数转换方法,为以后使用方便,自己归类一下.
一.JavaScript:
编码:encodeURIComponent(URIString)
解码:decodeURIComponent(encodedURIString)
二.ASP:
编码:Server.urlencode(str)
解码:无
三.Asp.Net
编码:HttpUtility.Urlencode(str)
解码:HttpUtility.UrlDecode(str)
四.Php
编码:urlencode(str)
解码:urldecode(str)
五.Java
编码:java.net.URLEncode.encode(str)
解码:java.net.URLDecoder.decode(str)
在 Java、.net 和 JS 中都有相应的 encodeURL 方法可用,在 Objective-C 语言中,你可以试下
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;
来对完整的 URL(带请求参数的)进行编码,比如执行下面的代码:
NSString *url=@";sd p2=中文";
NSString *encodedValue = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
上面代码转换出的 encodedValue 是:
;sd%20p2=%E4%B8%AD%E6%96%87
可见,它不会转换 URL 中的 ?% 符号,这也正常,因为它肯定分不出哪个 是参数的连接符号还是参数值,你可以单独编码参数,然后在拼接成 URL 之前把属性参数值中的 ?% 等符号分别替换成相应的编码。
或者,您还可以试下另外一个方法来单独编码参数值,然后拼接成完整的 URL:
/* newString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, origString, NULL, NULL, kCFStringEncodingUTF8); */
CF_EXPORT
CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);
本文原始链接:, 来自:隔叶黄莺 Unmi Blog
参考代码,分别编码前面的 p1=%+sd fp2=中文,两个参数的代码和结果如下:
NSString *param = @"%+sd f";
NSString *encodedValue = (NSString*)CFURLCreateStringByAddingPercentEscapes(nil,
(CFStringRef)param, nil,
(CFStringRef)@"!*'();:@=+$,/?%#[]", kCFStringEncodingUTF8);
这样编码出来的 encodedValue 为 %25%2B%26sd%20f,对 ?% 等符号也会编码的。用上面的代码对 “中文” 进行编码的结果是:%E4%B8%AD%E6%96%87,与前面是一致的。
我实际应用时还是这个 CFURLCreateStringByAddingPercentEscapes 方法比较方便。
我们在项目中是使用的 ASIHTTPRequest 组件来访问 URL 的,在使用 ASIFormDataRequest 时发出它其中有一个方法:
- (NSString*)encodeURL:(NSString *)string
{
NSString *newString = NSMakeCollectable([(NSString *)CFURLCreateStringByAddingPercentEscapes(
kCFAllocatorDefault,
(CFStringRef)string, NULL, CFSTR(":/?#[]@!$ '()*+,;=\"%{}|\\^~`"),
CFStringConvertNSStringEncodingToEncoding([self stringEncoding])) autorelease]);
if (newString) {
return newString;
}
return @"";
}
看起来它就是个 Objective-C 版的 encodeURL 方法,可是它声明成了一个实例方法,必须构造出 ASIFormDataRequest 实例才能使用它,在它的父类 ASIHTTPRequest 中都无该方法。现在来试验一下这个方法的返回值:
ASIFormDataRequest *formDataRequest = [ASIFormDataRequest requestWithURL:nil];
NSString *encodedValue1 = [formDataRequest encodeURL:@"%+sd f"];
NSString *encodedValue2 = [formDataRequest encodeURL:@"中文"];
得出的 encodedValue1 和 encodedValue2 分别是 %25%2B%26sd%20f 和 %E4%B8%AD%E6%96%87,和前面是一致的,所以你可以用 ASIFormDataRequest 提供的方式来进行 URLEncode,把这个方法提出为一个工具方法即可。
urlencode编码:就是将字符串以URL编码,一种编码方式,主要为了解决url中中文乱码问题。
例如:
String mytext = java.net.URLEncoder.encode("中国", "utf-8"); //urlencode编码
String mytext2 = java.net.URLDecoder.decode(mytext, "utf-8"); //urlencode解码
这两条语句在同一个页面中的话,得到的结果是:
mytext: %E4%B8%AD%E5%9B%BD
mytex2: 中国
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~