427 votes

Comment coder URl quelque chose dans Node.js ?

Je veux coder l'URL :

SELECT name FROM user WHERE uid = me() 

Dois-je télécharger un module pour cela ? J'ai déjà le module de demande.

10 votes

En effet, cette route est glissante et doit être évitée à tout prix.

29 votes

Essayez-vous de mettre une instruction SQL dans votre url ? ??? faites attention à l'option Attaque par injection SQL ! C'est généralement une mauvaise idée d'exposer SQL aux utilisateurs, c'est vraiment dangereux.

5 votes

@LightnessRacesinOrbit : ressemble à une requête FQL.

773voto

Joe Points 34413

Vous pouvez utiliser la fonction JavaScript encodeURIComponent :

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

donner

'select%20*%20from%20table%20where%20i()'

93 votes

Pour éviter aux visiteurs une recherche, oui... decodeURIComponent est comment vous décoder l'URI codé. Vous êtes les bienvenus.

146voto

nicolaskruchten Points 6130

Le module intégré querystring est ce que vous recherchez :

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()'

5 votes

Dans ce cas, nous ne pouvons passer qu'une carte et non une chaîne, donc si arg est une chaîne, vous ne verrez rien dans le résultat. Donc si vous avez des chaînes à encoder, utilisez encodeURIComponent().

4 votes

C'est mieux pour encoder des objets JSON et les envoyer par POST.

0 votes

Pas si la chaîne contient des caractères ' ou "

52voto

Kamrul Points 1042

Utilisez le escape fonction de querystring . Il génère une chaîne de sécurité 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 votes

Cela semble être la fonction correcte ; querystring.stringify() (dans la réponse de Nicolas) semblent retourner une chaîne vide maintenant.

7 votes

nodejs.org/api/ dit : "Le querystring.escape() est utilisée par querystring.stringify() et il n'est généralement pas prévu qu'il soit utilisé directement."

29voto

Flimm Points 8870

Notez que l'encodage URI est bon pour la partie requête, il ne l'est pas pour le domaine. Le domaine est codé en utilisant le punycode. Vous avez besoin d'une bibliothèque comme URI.js pour convertir un URI en IRI (Internationalized Resource Identifier).

C'est correct si vous prévoyez d'utiliser la chaîne plus tard comme chaîne de requête :

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

Si vous ne voulez pas de caractères ASCII comme / , : et ? pour être échappé, utilisez encodeURI à la place :

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

Cependant, pour d'autres cas d'utilisation, vous pouvez avoir besoin de uri-js à la place :

> 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'

18voto

John Culviner Points 4878

EncodeURIComponent(string) le fera :

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

Faire passer du SQL dans une chaîne de requête n'est pas forcément une bonne idée,

voir celui-ci

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X