Niestandardowe znaki w URL
Najlepsza odpowiedź _McHappy 19.05.2017 02:22
Znalazłem inc dla source mod'a, należałoby tylko (a może 'aż') dostosować do amxx.
https://forums.allie...ad.php?t=101764
@Aktualizacja
Dla amxx też jest ten projekt https://forums.allie...t=87252?t=87252 Przejdź do postu
Ogen Dogen
19.05.2017
Witam, potrzebuje przekazać nicki graczy w zapytaniu HTTP przez sockety a często zawierają nietypowe symbole, które nie wiem jak zakodować.
O ile nie mam problemu z standardowymi znakami typu ampersand, znak zapytania, kropka itp. to gracze bardzo często mają nietypowe symbole spoza standardu ASCII np. ①②③ α в ¢ ∂ є f g н ι к ℓ ► ▲ ▪ ▫ © ® ¤ ∆ ◊ ∞ √ £ • ≈ ◊ ▫ □ ∏ ۩ ۞
Czy jest w ogóle możliwe zakodowanie i przekazanie tego typu symboli przez HTTP w AMXX ? Jeżeli nie, to jak się zabezpieczyć przed tym ? Sprawdzenie wartości ASCII wystarczy ?
Najlepsza odpowiedź
_McHappy
19.05.2017
Znalazłem inc dla source mod'a, należałoby tylko (a może 'aż') dostosować do amxx.
https://forums.allie...ad.php?t=101764
@Aktualizacja
Dla amxx też jest ten projekt https://forums.allie...t=87252?t=87252
Użytkownik _McHappy edytował ten post 19.05.2017 02:26
Ogen Dogen
19.05.2017
Hmmm. GT stosuje kodowanie base64 dla nietypowych nicków, więc też mógłbyś tego spróbować.
Znalazłem inc dla source mod'a, należałoby tylko (a może 'aż') dostosować do amxx.
https://forums.allie...ad.php?t=101764
@Aktualizacja
Dla amxx też jest ten projekt https://forums.allie...t=87252?t=87252
Dzięki, nie pomyślałem o innym kodowaniu Przetestuje i dam znać.
//edit Informacja dla potomnych
Aby w pełni poprawnie przekazywać nicki przez URL należy najpierw zakodować go w base64 za pomocą tej funkcji - https://forums.allie...210&postcount=4
Następnie w zakodowanym stringu base64 należy zakodować inne symbole, które są nielegalne w zapytaniach HTTP np. znak równości, który często pojawia się na końcu.
Do tego napisałem taką funkcję:
public url_encode(str[], len) { replace_all(str, len, "%", "%25"); // to musi byc na samym poczatku! replace_all(str, len, " ", "%20"); // lub + replace_all(str, len, ".", "%2E"); replace_all(str, len, "'", "%27"); replace_all(str, len, "$", "%24"); replace_all(str, len, "&", "%26"); replace_all(str, len, "+", "%2B"); replace_all(str, len, ",", "%2C"); replace_all(str, len, "/", "%2F"); replace_all(str, len, ":", "%3A"); replace_all(str, len, ";", "%3B"); replace_all(str, len, "=", "%3D"); replace_all(str, len, "?", "%3F"); replace_all(str, len, "@", "%40"); replace_all(str, len, "^"", "%22"); replace_all(str, len, "<", "%3C"); replace_all(str, len, ">", "%3E"); replace_all(str, len, "#", "%23"); replace_all(str, len, "{", "%7B"); replace_all(str, len, "}", "%7D"); replace_all(str, len, "|", "%7C"); replace_all(str, len, "~", "%7E"); replace_all(str, len, "[", "%5B"); replace_all(str, len, "]", "%5D"); replace_all(str, len, "`", "%60"); }
Na serwerze należy wykonać operację odwrotną: (przykład w PHP)
urldecode(base64_decode($_GET["nick"]));