2013-04-06 12 views
7

Próbuję więc dekodować ciąg, który był wcześniej urlencoded z php w węźle. Około miesiąca temu miałem z nim do czynienia:Najlepszy sposób na urldecode (php) w ​​NodeJS

querystring.unescape(str.replace(/\+/g, '%20')); 

Po prostu przestał działać - nie wiem, czy było to jakieś uaktualnienie węzła, czy co. Po zabawie wydaje mi się, że mogę po prostu użyć "unescape()", ale nie jestem pewien, czy jest to niezawodny.

unescape(str.replace(/\+/g, '%20')); 

Moje pytanie brzmi, jaki jest najlepszy sposób i czy ktoś jeszcze zauważył ten problem. Zauważ, że pierwsza linia działa z prostymi ciągami, ale rozkłada się na dziwne znaki - więc może jakiś problem z kodowaniem nie widzę.

Oto ciąg.

% E6% 82% CCI-T% 8C% 01 + A

Teraz przejdź do http://www.tareeinternet.com/scripts/unescape.html i dekoduje go. To jest mój oryginał (to zaszyfrowany ciąg RC4). Chcę, aby węzeł zwrócił ten ciąg.

+0

Wygląda na to, że 'unescape (str)' dekoduje go tak, jak wspomnianą stronę; wygląda na to, że 'querystring.unescape()' traktuje tylko zakodowane ciągi UTF-8, a nie surowe ciągi bajtów. – robertklep

Odpowiedz

29

Jeśli po prostu użyjesz funkcji unescape wbudowanej w Node.js, Twój wynik powinien być zgodny z oczekiwaniami.

Korzystanie node.js 0.10.1 i działa

unescape('%E6.%82%CCI-T%8C%01+A'); 

na interaktywnej powłoki, mam

'æ.ÌI-T\u0001+A' 

jako rezultat, który wygląda bardzo podobnie, co chcesz uzyskać.

Mam nadzieję, że to pomoże :-)

+0

No tak, właśnie to mam powyżej - musisz dodać bit zamieniający, ponieważ unescape sam w sobie złamie długie struny - próbowałem. Jestem ciekawy, dlaczego querstring.unescape nagle przestał dla mnie działać – cyberwombat

Powiązane problemy