2013-04-06 10 views
7

Quindi sto provando a decodificare una stringa precedentemente codificata in url con php nel nodo. Circa un mese fa ho avuto a lavorare con:Il modo migliore per urldecode (php) in NodeJS

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

poi appena smesso di funzionare - non so se si trattasse di qualche aggiornamento Nodo o cosa. Dopo aver giocato intorno sembra che io possa semplicemente usare 'unescape()' ma non sono sicuro che sia ancora infallibile.

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

La mia domanda è qual è il modo migliore e qualcun altro ha notato questo problema. Si noti che la prima riga funziona con stringhe semplici ma si scompone con caratteri dispari - quindi forse qualche problema di codifica che non vedo.

Ecco una stringa:.

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

Passare al http://www.tareeinternet.com/scripts/unescape.html e decodificarlo. Questo è il mio originale (è una stringa crittografata RC4). Voglio che Node restituisca quella stringa.

+0

Sembra 'unescape (str)' lo decodifica proprio come la pagina che hai menzionato; sembra che 'querystring.unescape()' si occupi solo di stringhe UTF-8 codificate, non stringhe di byte non elaborate. – robertklep

risposta

29

Se si utilizza semplicemente la funzione unescape incorporata in Node.js, il risultato dovrebbe essere quello che si desidera.

Utilizzando Node.js 0.10.1 e funzionante

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

sulla shell interattiva, ottengo

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

come risultato che sembra molto simile a quello che si desidera ottenere.

Spero che questo aiuti :-)

+0

Beh, sì, questo è quello che ho sopra - è necessario aggiungere il bit di sostituzione in quanto unescape da solo alla fine si spezzerà su stringhe lunghe - ho provato. Sono solo curioso di sapere perché querstring.unescape abbia improvvisamente smesso di funzionare per me – cyberwombat