c - 为什么地址栏中的 UTF-8 Unicode 与 GET 形式在 C 中有所不同?

标签 c unicode utf-8 cgi fastcgi

我使用 C 开发了一个简单的网页。

我将获取 url 地址值并使用 strtok、strsep 检查它们。

que=getenv("QUERY_STRING");
...
strcpy(val,strsep(&string,"="));
printf("%s<br>",val);

使用 <form method="GET"> 时的浏览器结果

例如:当您键入 ۱在输入字段中并按提交,它重定向到 http://localhost/api?identifier=%26%231777%3B .

getenv("QUERY_STRING") 的输出:

identifier=%26%231777%3B 

Address bar Browser Output

尝试不同的值:

۱   => %26%231777%3B
۲   => %26%231778%3B
۳   => %26%231779%3B
۱۲۳ => %26%231777%3B%26%231778%3B%26%231779%3B

可以使用 DecodeQueryStringC 中的函数轻松修复它。

这是由 Max Base 编写的。

https://github.com/BaseMax/DecodeQueryStringC

decodeUrl(val,val);
printf("Fix:%s<br>",val);

在地址栏中手动输入时的浏览器结果

我正在使用 Firefox 60.5.1esr (64-bit)Chromium 71.0.3578.98 (Official Build) (64-bit) .

例如:当键入 ‍ ?identifier=۱ 时在 http://localhost/api 的末尾:

它重定向到http://localhost/api?identifier=%DB%B1由浏览器自动生成。

getenv("QUERY_STRING") 的输出:

identifier=%DB%B1 

Address bar Browser Output

尝试不同的值:

۱   => %DB%B1
۲   => %DB%B2
۳   => %DB%B3
۱۲۳ => %DB%B1%DB%B2%DB%B3

我还想在用户手动修改 URL(链接)时支持。 指导我。

最佳答案

percent-encoded字符串

%26%231779%3B

不解码为 1۳ 是 HTML 实体而不是 UTF-8。您不应该使用 decodeHtmlEntities,而只是 decodeUrl。同样,有些代码正在执行重定向,但做得太多了。

关于c - 为什么地址栏中的 UTF-8 Unicode 与 GET 形式在 C 中有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075034/

相关文章:

C通过指针将多个int数组存储到另一个数组中

c - Unistd read() 最大尺寸

java - 如何显示拉丁扩展 A 字符集中的字符串

mysql - MySQL "Text"字段中有多少 UTF-8 文本?

mysql - Node.js 将 ISO8859-1 编码为 UTF-8

c - 是否可以在 printf 中设置字符数

c - 函数调用后变量值发生变化,未被使用

c# - 我可以在 Python3 中使用不同的代码点吗?

java - 将韩文音节分解为字母 (jamo)

php - KOI8-R转UTF8