2013-02-12 15 views
10

Potrzebuję wysłać dane metodą POST.Jak przygotować zakodowane dane POST w javascript?

Na przykład, mam ciąg "bla & bla & bla". Próbowałem używać encodeURI i otrzymałem "bla & bla & bla" jako wynik. Muszę zastąpić "&" czymś właściwym dla tego przykładu.

Jakiego rodzaju metody powinienem użyć, aby przygotować prawidłowe dane POST?

AKTUALIZACJA:

muszę konwertować tylko charachters które złamały żądania POST. Tylko oni.

+0

http://stevenbenner.com/2010/03/javascript-regex-trick-parse-a-query-string-into-an-object/ – karaxuna

+0

Czy nie ma standardowej metody, aby to zrobić? – Dmitry

+0

Czy używasz JQuery? –

Odpowiedz

14
>>> encodeURI("bla&bla&bla") 

"bla&bla&bla" 

>>> encodeURIComponent("bla&bla&bla") 

"bla%26bla%26bla" 
+1

Jeśli ktoś próbuje dokładnie naśladować to, co przeglądarka załaduje, należy zauważyć, że formularze internetowe (w szczególności te bez załączników plików) używają 'application/x-www-form-urlencoded' kodowanie. W tym formacie przeglądarki będą zakodować spacje w postaci '+' zamiast '% 20' (jak w przypadku' encodeURIComponent') - kodowanie jest niejednoznaczne, ale każda opcja dekoduje te same dane. [Zobacz format tutaj.] (Https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1) Chciałbym podkreślić, że 'encodeURIComponent' jest sposobem na wejście ta odpowiedź. –

12

Można również wykorzystać escape() funkcji . Funkcja escape() koduje ciąg znaków. Funkcja ta sprawia, że ​​ciąg przenośne, dzięki czemu może być przekazywana w dowolnej sieci na dowolnym komputerze, który obsługuje funkcję characters.This ASCII koduje znaki specjalne, z wyjątkiem: * @ - _ + . /

var queryStr = "bla&bla&bla"; 
alert(queryStr);    //bla&bla&bla 
alert(escape(queryStr));  //bla%26bla%26bla 

Zastosowanie unescape() zdekodować ciąg.

var newQueryStr=escape(queryStr); 
alert(unescape(newQueryStr)); //bla&bla&bla 

Uwaga:

escape() will not encode: @*/+ 

    encodeURI() will not encode: [email protected]#$&*()=:/,;?+' 

    encodeURIComponent() will not encode: ~!*()' 

Po pewnym wyszukiwania w internecie, mam następujący:

escape()

nie używaj go.

encodeURI()

Zastosowanie encodeURI kiedy chcesz URL pracy. Dodać do tego połączenia:

encodeURI("http://www.google.com/a file with spaces.html") 

dostać:

http://www.google.com/a%20file%20with%20spaces.html 

Nie nazywaj encodeURIComponent ponieważ zniszczyłoby to adres URL i zwraca

http%3A%2F%2Fwww.google.com%2Fa%20file%20with%20spaces.html 

encodeURIComponent()

Użyj encodeURIComponent, aby zakodować adres URL pa rameter.

param1 = encodeURIComponent ("http://xyz.com/?a=12&b=55")

Then you may create the URL you need: 

url = "http://domain.com/?param1=" + param1 + "&param2=99"; 

I dostaniesz to pełny adres URL:

http://www.domain.com/?param1=http%3A%2F%2Fxyz.com%2F%Ffa%3D12%26b%3D55¶m2=99 

Zauważ, że encodeURIComponent nie uciec "charakter. Najczęstszym błędem jest użycie go do tworzenia atrybutów html, takich jak href='MyUrl',, które mogą ucierpieć z powodu błędu wtrysku. Jeśli konstruowania html z ciągów znaków, albo użyć "zamiast«o wycenę atrybutów lub dodać dodatkową warstwę kodowania (»może być zakodowany jako% 27)

Ref.: When are you supposed to use escape instead of encodeURI/encodeURIComponent?

Ponadto, jak używasz JQuery, spojrzeć na this wbudowanej funkcji.

+0

Czy będzie bardziej poprawne dla metody POST? Nie mogę zmienić kodu odbiornika POST. Muszę używać kodowania URL zgodnie z API. – Dmitry

+0

@Altaveron Zobacz aktualizację mu i zobacz, co chcesz ... !! –

+0

Ale nie wiem, która metoda jest najlepsza dla danych POST :( – Dmitry

-1

Chcę opublikować javascript utworzone ukrytą formę.

Więc pytanie brzmi, czy encodeURIComponent() powinny być wykorzystywane na EAC h zmienna POST.

Nie znalazłem odpowiedzi na pytanie Dmitry'ego (i moje) w tym wątku. Ale znalazłem odpowiedź in this thread.

W przypadku formularza/POST, w którym znajdują się pola przesyłania, należy użyć <form enctype="multipart/form-data">, jeśli nie jest używane żadne pole przesyłania, należy wybrać siebie jako described here. Przesłanie formularza powinno wykonać zadanie całkowicie, więc nie ma potrzeby jawnego używania encodeURIComponent().

Jeśli utworzysz POST Http bez użycia formularza lub bez jakiejś biblioteki, która tworzy Http POST z twoich danych, musisz wybrać enctype = i połączyć dane.

To będzie łatwe dla application/x-www-form-urlencoded, gdzie użyjesz encodeURIComponent() dla każdej wartości i połączysz je dokładnie tak, jak dla żądania GET.

Jeśli zdecydujesz się na użycie multipart/form-data, to ...? Powinieneś google więcej jak kodować i dołącz do nich w takim przypadku.

+0

To bardzo długi sposób na powiedzenie "W większości przypadków skorzystaj z odpowiedzi sprzed trzech lat, w przeciwnym razie użyj Google". – Quentin

+0

"Nie trzeba używać wyrażenia encodeURIComponent() jawnie" pomogło mi – bendecko