Come posso codificare URl qualcosa in Node.js?


314

Voglio codificare questo URL:

SELECT name FROM user WHERE uid = me() 

Devo scaricare un modulo per questo? Ho già il modulo di richiesta.


8
In effetti, questa è una strada scivolosa e dovrebbe essere evitata a tutti i costi.
Alfred,

19
Stai cercando di inserire l'istruzione SQL nel tuo URL ??? fai attenzione all'attacco SQL Injection ! In genere è una cattiva idea esporre SQL agli utenti, è davvero pericoloso.
Leonmax,

4
@LightnessRacesinOrbit: sembra una query FQL.
nikc.org,

2
@Demi: No? Come funzionerebbe. Le autorizzazioni DBMS non sono sufficientemente dettagliate, anche se ogni singolo utente SO ha il proprio account DB. Dimmi dove su SO vedi le query SQL passate direttamente? L'unica eccezione è data explorer, ma sono tutte viste di sola lettura e non sono certamente inserite nell'URL.
Corse di leggerezza in orbita,

17
Il ragazzo potrebbe costruire uno strumento di convalida SQL, niente di sbagliato nel passare i comandi SQL in un esempio del genere. Concentrarsi troppo sul non rispondere alla domanda né dare un buon consiglio (il commento più votato non dà un buon consiglio, prende in giro solo l'OP)
Rafael Eyng

Risposte:


598

Puoi usare JavaScript encodeURIComponent:

encodeURIComponent('select * from table where i()')

31
Per salvare i visitatori una ricerca, sì ... decodeURIComponentè come decodificare l'URI codificato. Prego.
KyleFarris,

125

Il modulo integrato querystringè quello che stai cercando:

var querystring = require("querystring");
var result = querystring.stringify({query: "SELECT name FROM user WHERE uid = me()"});
console.log(result);
#prints 'query=SELECT%20name%20FROM%20user%20WHERE%20uid%20%3D%20me()'

4
in questo caso possiamo solo passare una mappa non una stringa, quindi se arg è una stringa non vedrai nulla in risultato. Quindi se hai stringhe da codificare usa encodeURIComponent ().
Ankit Patial,

1
Questo è meglio per codificare oggetti JSON e postarli.
Alex W,

Non se la stringa contiene "o" caratteri
Jkarttunen,

47

Utilizzare la escapefunzione di querystring. Genera una stringa sicura URL.

var escaped_str = require('querystring').escape('Photo on 30-11-12 at 8.09 AM #2.jpg');
console.log(escaped_str);
// prints 'Photo%20on%2030-11-12%20at%208.09%20AM%20%232.jpg'

1
Questa sembra sicuramente essere la funzione corretta; querystring.stringify()(nella risposta di Nicolas) ora sembrano restituire una stringa vuota.
brandonscript,

4
nodejs.org/api/… dice: "Il querystring.escape()metodo è usato da querystring.stringify()e generalmente non dovrebbe essere usato direttamente".
Simon Hänisch,

17

Si noti che la codifica URI è buona per la parte della query, non è buona per il dominio. Il dominio viene codificato utilizzando punycode. È necessaria una libreria come URI.js per la conversione tra URI e IRI (Internationalized Resource Identifier).

Ciò è corretto se si prevede di utilizzare la stringa in seguito come stringa di query:

> encodeURIComponent("http://examplé.org/rosé?rosé=rosé")
'http%3A%2F%2Fexampl%C3%A9.org%2Fros%C3%A9%3Fros%C3%A9%3Dros%C3%A9'

Se non si desidera che i caratteri ASCII piace /, :e ?da sfuggiti, utilizzare encodeURIinvece:

> encodeURI("http://examplé.org/rosé?rosé=rosé")
'http://exampl%C3%A9.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'

Tuttavia, per altri casi d'uso, potresti invece aver bisogno di uri-js :

> var URI = require("uri-js");
undefined
> URI.serialize(URI.parse("http://examplé.org/rosé?rosé=rosé"))
'http://xn--exampl-gva.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'

12

encodeURIComponent (stringa) lo farà:

encodeURIComponent("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"

Passare SQL in una stringa di query potrebbe non essere un buon piano,

vedi questo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.