←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Niestandardowe znaki w URL


Najlepsza odpowiedź _McHappy 19.05.2017 02:22

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 Przejdź do postu

  • +
  • -
Ogen Dogen - zdjęcie 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 ?

Odpowiedz

  • +
  • -
Najlepsza odpowiedź _McHappy - zdjęcie _McHappy 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
Użytkownik _McHappy edytował ten post 19.05.2017 02:26
Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie 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 :D 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"]));
Odpowiedz