不同浏览器之间的XHTML特殊字符
xhtml special characters between different browsers
我正在制作一个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;
}
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 转换特殊字符(UTF-8)
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- c++为什么ifstream get()函数返回无法识别的特殊字符
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 如何从文本文件C++读取整数和特殊字符
- USB序列号显示特殊字符
- 键入特殊字符并保存在文件中
- 回文,不包括特殊字符和空格
- 无法使用 Unicode 特殊字符设置窗口文本
- 使用 libmysql 插入特殊字符
- 使用具有特殊字符的正则表达式标记 C++ 字符串
- 如何输入以特殊字符开头的字符串
- 如何使用正则表达式匹配不包含特殊字符(&、\、<、>、|、)的字符串,除非它们以反斜杠开头
- C++降低特殊字符,例如 ü
- 不同浏览器之间的XHTML特殊字符