为什么地址栏中的UTF-8 Unicode与GET形式的区别在于C?

问题描述 投票:2回答:2

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

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

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

Browser Result when using <form method="GET">

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

getenv("QUERY_STRING")的输出:

identifier=%26%231777%3B 

Trying with different values:

۱   => %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);

Browser result when manually typed in the address bar

我正在使用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 

Trying with different values:

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

当用户手动修改URL(链接)时,我也想支持。引导我。

c unicode utf-8 cgi fastcgi
2个回答
1
投票

percent-encoded字符串

%26%231779%3B

不解码到۱&#1779;这是一个HTML实体而不是UTF-8。你不应该使用decodeHtmlEntities而只是decodeUrl。同样地,有一些代码正在执行重做过多的操作。


-1
投票

不知道阿拉伯语怎么样,在希伯来语中有不同类型的编码。像UTF8和其他一样,没有细节,但你检查了吗?我的帖子中没有任何相关内容。

© www.soinside.com 2019 - 2024. All rights reserved.