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

时间:2015-07-29 20:44:59

标签: c++ browser xhtml cgi

我正在开发一个cgi程序,我收到一个这样的电子邮件地址:someone@site.com并将其存储在一个文件中。 但有些事情很奇怪。当我使用IE时,' @' char,赢了不变,文件也一样,但是当我使用chrome时,' @' char,对%40的更改以及检索' @'的唯一方法是找到%40并将其替换为' @' .am我编码错误或者chrome有问题?

更好地理解: IE:someone@site.com 铬:有人%40site.com

当我将信息发送回浏览器时,%40不会更改为@

2 个答案:

答案 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;
}