Почему UTF-8 Unicode в адресной строке против формы GET отличается от C? - PullRequest
2 голосов
/ 09 марта 2019

Я разработал простую веб-страницу, используя C.

Я получу значения адресов URL и проверю их с помощью strtok, strsep.

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

Результат браузера, когдаиспользуя <form method="GET">

Например: Когда вы набираете ۱ в поле ввода и нажимаете submit, он перенаправляет на 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:

Itавтоматически перенаправляет на 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

Я также хочу поддержать, когда руководство пользователяLy изменяет URL (ссылку).Веди меня.

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Строка в процентном кодировании *1002*

%26%231779%3B

не декодируется в ۱, а &#1779;, который является сущностью HTML, а не UTF-8.Вы не должны использовать decodeHtmlEntities, но просто decodeUrl.Аналогично, есть некоторый код, который выполняет перенаправление, которое делает слишком много.

0 голосов
/ 09 марта 2019

Не знаю, как насчет арабского, на иврите есть разные типы кодирования.Как UTF8 и другие, не вдавались в подробности, но вы это проверяли?Я не сделал ничего подобного в вашем посте.

...