我使用 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
尝试不同的值:
۱ => %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
尝试不同的值:
۱ => %DB%B1
۲ => %DB%B2
۳ => %DB%B3
۱۲۳ => %DB%B1%DB%B2%DB%B3
我还想在用户手动修改 URL(链接)时支持。 指导我。
最佳答案
%26%231779%3B
不解码为 1
但 ۳
是 HTML 实体而不是 UTF-8。您不应该使用 decodeHtmlEntities
,而只是 decodeUrl
。同样,有些代码正在执行重定向,但做得太多了。
关于c - 为什么地址栏中的 UTF-8 Unicode 与 GET 形式在 C 中有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55075034/