Tworzenie/kodowanie URL-a w JS

Odpowiedz Nowy wątek
2011-07-30 09:45
Darwin Mieczysław
0

Witam

Chciałbym zamienić string "lalala %$ %& </html>" na ciąg "lalala%20..." w Javascripcie, tak żeby mógłby to być poprawny adres URL.

Funkcje escape(), encodeURI() oraz encodeURIComponent() nie robią chyba nic, ponieważ nie widzę żadnych efektów na zastosowanych stringach.

Jedyna droga jaką znalazłem na Google, to napisanie własnej f-cji kodującej każdy znak specjalny. Czy to rzeczywiście jedyny sposób?

Pozostało 580 znaków

2011-07-30 09:53
bswierczynski
0

Robią, robią. Pewnie źle ich używasz.

Czy używasz tych funkcji w poniższy -- niewłaściwy -- sposób?

var uri = "lalala %$ %& </html>"; // zmienna uri może być też parametrem funkcji czy pochodzić z innego źródła
 
...
 
encodeURI(uri);

To faktycznie nic Ci nie da, bo to nie jest poprawne użycie tej funkcji. Funkcje, które podałeś, nie modyfikują przekazanego im ciągu znaków, bo w JavaScripcie nie mają takiej możliwości (!). Funkcje te zwracają nowy ciąg znaków, zakodowany tak jakbyś chciał.

Czyli ich użycie wygląda tak:

var uriToEncode = "lalala %$ %& </html>";
var encodedURI = encodeURI(uriToEncode);

Po tych operacjach, w zmiennej encodedURI będzie: lalala%20%25$%20%25&%20%3C/html%3E.

Pozostało 580 znaków

2011-07-30 10:14
Darwin Mieczysław
0

W takim razie używam tej funkcji właściwie.

var myvar = "256363#$%^&*(";
url = "http://www.example.com/" + encodeURI(myvar)

Pozostało 580 znaków

2011-07-30 10:18
bswierczynski
0

Tak. Ale wbrew temu, co napisałeś w oryginalnym poście, efekty SĄ. W zmiennej url ten ciąg rozpoczynający się od cyfr jest nieco inny niż w zmiennej myvar.

Pozostało 580 znaków

2011-07-30 10:20
Darwin Mieczysław
0

Spacje pozostają tak jak były, nie ma ani śladu po "%20"

Pozostało 580 znaków

2011-07-30 10:23
Darwin Mieczysław
0

Po innych znakach też.

Czy jest możliwe że .htaccess, dzięki Rewrite Rule coś tu mieszał?

Pozostało 580 znaków

2011-07-30 10:25
bswierczynski
0

No to mamy zabawną sytuację, bo prawdopodobnie coś robisz źle. Wziąłem Twój kod, dodałem tylko var przed zmienną URL i jeśli wykonam go ze zmienną myvar ustawioną na jakąś wartość ze spacjami:

var myvar = "25 63 63#$%^&*(";
var url = "http://www.example.com/" + encodeURI(myvar);

to po jego wykonaniu w url siedzi ciąg http://www.example.com/25%2063%2063#$%25%5E&*(.

Co Ci się wyświetla, jeśli odpalisz poniższy kod?

alert(encodeURI("Czy widzisz tu jakieś spacje?"));

Ja mam ładnie zakodowany komunikat i Ty też powinieneś mieć.

Pozostało 580 znaków

2011-07-30 10:27
bswierczynski
0

Nie, niemożliwe żeby mod_rewrite namieszał coś w działaniu JavaScriptu. Możliwe, że kaszani Ci coś z URL-ami, ale to w warstwie, o której kompletnie mi nie powiedziałeś i która jest niezależna od JS-a.

Pozostało 580 znaków

2011-07-30 10:33
Darwin Mieczysław
0

String: "^^ssd ss $%^&*" (myvar)

(encodeURIComponent((myvar)))

Efekt: "^^ssd ss %24%25^%26*"

Co do .htaccess:
Pod url generowany przez JS przekierowywany jet użytkownik. .htaccess wyłapuje to żądanie i formuje z go z "ładnej postaci" na postać w stylu plik.php?x=$1

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0