C++ 不同浏览器之间的xhtml特殊字符

C++ 不同浏览器之间的xhtml特殊字符,c++,browser,xhtml,cgi,C++,Browser,Xhtml,Cgi,我正在从事cgi项目,我收到的电子邮件地址如下:someone@site.com并将其存储在文件中。 但奇怪的事情发生了。当我使用IE时,“@”字符不会改变,并且在文件中是相同的,但当我使用chrome时,“@”字符会更改为%40,检索“@”的唯一方法是找到%40并将其替换为“@”。我是编码错误还是chrome有问题 为了更好地理解: 即:someone@site.com Chrome:someone%40site.com 当我将信息发送回浏览器时,%40并没有变为@实际上是IE做得不对-您需要

我正在从事cgi项目,我收到的电子邮件地址如下:someone@site.com并将其存储在文件中。 但奇怪的事情发生了。当我使用IE时,“@”字符不会改变,并且在文件中是相同的,但当我使用chrome时,“@”字符会更改为%40,检索“@”的唯一方法是找到%40并将其替换为“@”。我是编码错误还是chrome有问题

为了更好地理解: 即:someone@site.com Chrome:someone%40site.com


当我将信息发送回浏览器时,%40并没有变为@

实际上是IE做得不对-您需要将%xx代码改回字符。在%40的情况下,这将是ASCII编号0x40==64='@'。但是,您不能依赖它是ASCII,因为unicode字符(例如重音字母)也将进行类似的编码

大多数PHP和Python语言都有一个辅助函数来编码和解码这些(PHP的被称为URLYNECODER)和URLL()(我没有在C++上使用CGI很长时间,因此,不确定是否有现成的帮助程序,或者您是否需要自己编写代码-无论哪种方式,您都应该准备解码url编码字符串,因为所有浏览器都会对某些字符(如果不是全部字符)执行此操作(例如,非常常见的是%20而不是空格)


希望这有帮助

上面的答案是正确的,只是为了让主题更丰富,我认为这种代码的平静可以成为您使用的功能:

     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;
}
intmain()
{
整数;
String DestString =“H% 40 C++程序员% 40!”
字符串变换;
istringstream输入;
string::size\u type location=dataString.find(“%”);
而(位置>十六进制>>数字;
数据串更换(位置,3,1,静态_型铸造(编号));
location=dataString.find(“%”,location+1);
}
谷歌“url编码”