Dominias
#programowanie #javascript #angular
Mam mały problem i szukam najlepszego rozwiązania, mianowicie przesyłanie nazwy usera w URL - jeden z klientów userów tworzy na zasadzie "domena\username". Wcześniej załatwiałem to w taki sposób:

const userName = encodeURIComponent(this.username as string);
No ale \ wiadomo, że w JS służy jako escape przez co encodowanie sie nie udaje. Jak ugryźliście taki temat?
0
  • Najlepsze
  • Wszystkie komentarze
a.....e
a.....e
@Dominias: Głupoty gadasz, @LollyPoop dobrze ci mówi. Wywołaj sobie console.log("test\user") a potem encodeURIComponent(prompt()) i wklep to samo.
1
a.....e
a.....e
@andrut1291: Pudło, dlaczego polecasz base64, zamiast kodowania do url, skoro base64 też trzeba zakodować albo wywołać w wersji url-safe.
1
FortresMaximus
FortresMaximus
0
Dominias
@FortresMaximus: tylko mi o to chodzi, że ja chcę zrobić encode po to, żeby wstawić to do URL - robię to, żeby uniknąć błędu w ścieżce kiedy nazwa usera ma slasha
0
FortresMaximus
FortresMaximus
0
Dominias
Jak dostanę 'test\user' to poleci błąd
0
LollyPoop
LollyPoop
@Dominias: nie czaje, \ jako escape character występuje w string literalu, czyli jak explicite w kodzie źródłowym definiujesz stały string z tym znakiem
a jak \ jest po prostu wprowadzony z jakiegos inputu to to jest zwykły znak a nie żaden escape character
0
LollyPoop
LollyPoop
@Dominias: jak testujesz sobie w konsoli to masz do czynienia ze string literalem wlasnie - wez tam wpisz 'test\user' w argumencie
0
Dominias
@LollyPoop: spójrz na metodę, jak pod this.username kryje się coś takiego jak 'test\user' to URL jest niepoprawny i request nie przechodzi, dlatego utworzyłem zmienną żeby przekazywać encoded userNamea:

startDownload(filename: string, type: DownloadType): void {
const userName = encodeURIComponent(this.username as string);
window.open('${ApiEndpoints.DOWNLOADS}/${userName}/${type}/${filename}');
}

No ale to wciąż nie załatwi błędu bo metoda encodeURIComponent zwróci błąd jak natrafi na \
0
LollyPoop
LollyPoop
@Dominias: encodeURIComponent nie zwróci błędu tylko najwyżej path będzie niepoprawny bo wrzucasz tam procenty, możliwe, że to nielegalne, nie jestem pewien
0
LollyPoop
LollyPoop
@Dominias: jeśli chcesz w segmencie patha przekazać niedopuszczalne znaki to musisz to zaeknodować i rozkodować na backendzie tak by kod nie zawierał nielegalnych znaków
0
Dominias
@LollyPoop: a ustaw userName z jednym backslashem bo tak dostaję tego usera, wtedy sypnie błąd w tej metodzie
0
LollyPoop
LollyPoop
@Dominias: tam jest jeden backslash, te 2 backslashe w definicji userName to string literal i tam backslash występuje jako escape character, po przypisaniu do zmiennej backslash jest już jeden
0
andrut1291
andrut1291
@Dominias Zakoduj to w base64 potem na serwerze odkoduj i będzie spoko.
0
andrut1291
andrut1291
@aloucie Czyli atob czy tam btoa też zwróci błąd jego będzie \ częścią stringa ? ( nie mam jak teraz tego spr. )
0
D.....k
@Dominias: jak potrzebujesz przesłać coś co nie może lecieć w url/parametrze to zabejsuj
0