我正在开发一个cgi程序,我收到一个这样的电子邮件地址:someone@site.com并将其存储在一个文件中。 但有些事情很奇怪。当我使用IE时,' @' char,赢了不变,文件也一样,但是当我使用chrome时,' @' char,对%40的更改以及检索' @'的唯一方法是找到%40并将其替换为' @' .am我编码错误或者chrome有问题?
更好地理解: IE:someone@site.com 铬:有人%40site.com
当我将信息发送回浏览器时,%40不会更改为@
答案 0 :(得分:3)
IE实际上做错了 - 您需要将%xx代码更改回字符。在%40的情况下,这将是ASCII否。 0x40 == 64 =='@'。但是,您不能依赖它是ASCII,因为unicode字符(例如重音字母)也将被类似地编码。
PHP和Python等大多数语言都有一个帮助函数来编码和解码它们(PHP的名称叫做url_encode()和url_decode()) - 我已经很久没有在C ++上使用CGI了,所以不确定是否有随时可用的帮助器,或者你必须自己编写代码 - 无论哪种方式你应该准备解码url编码的字符串,因为所有浏览器都会为某些字符执行此操作(如果不是全部的话)(例如。%20而不是空格很常见) )。
希望这有帮助!
答案 1 :(得分:1)
上面的答案是正确的,只是在使主题更丰富我认为这个代码的和平可以是你使用的功能:
int main()
{
int number;
string dataString="hi %40 c++ programmer %40 !";
string transform;
istringstream input;
string::size_type location = dataString.find("%");
while (location <string::npos)
{
transform = dataString.substr(location+1, 2);
input.str(transform);
input >> hex >> number;
dataString.replace(location,3,1,static_cast<char>(number));
location = dataString.find("%", location+1);
}
cout << dataString << endl;
}