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

xhtml special characters between different browsers

本文关键字:XHTML 特殊字符 之间 浏览器      更新时间:2023-10-16

我正在制作一个cgi程序,我正在接收一个电子邮件地址:someone@site.com并将其存储在一个文件中。但是奇怪的事情发生了。当我使用IE的"@"字符,不会改变,它在文件中是相同的,但是当我使用chrome,"@"字符,更改为%40,检索"@"的唯一方法是找到%40,并将其替换为"@"。我编码错误或chrome有问题吗?

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

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

实际上是IE做错了——你需要把%xx代码改回一个字符。在%40的情况下,这将是ASCII码。0x40 == 64 == '@'。但是,不能指望它是ASCII,因为unicode字符(如重音字母)也会被类似地编码。

像PHP和Python这样的大多数语言都有一个辅助函数来编码和解码这些(PHP的称为url_encode()和url_decode()) -我很久没有在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;
}