Tworzenie/kodowanie URL-a w JS

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?

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.

0

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

var myvar = "256363#$%^&*(";
url = "http://www.example.com/" + encodeURI(myvar)
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.

0

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

0

Po innych znakach też.

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

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ć.

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.

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

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