Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node.js - Express special characters in routes (/campañas)

I have a problem trying to set a route in Node JS with Express framework.

My route is this one:

app.get('/campaña/nueva', sms.nueva);

But i cant get it to work, because of the evil "Ñ" (it works with an "N" tho)

I used codeigniter for a while, and you can set what characters you want to enable or disable Do you guys knows of any workarround or way to enable it in node?

like image 965
Forres Avatar asked Mar 09 '13 16:03

Forres


2 Answers

I think you'll need to handle both a URL-encoded and perhaps a UTF-8 (and possibly Latin-1 also) variant. Check the following:

  1. How are your clients (browsers) sending the URL?

    • URL encoded as %C3%B1 ?
      • chrome and firefox send the %C3%B1 encoding
      • I would presume this is the dominant and compliant behavior
    • Unicode ?
      • I tested with curl and it looks to send a single character which I presume is just whatever encoding it got from my terminal, which is probably UTF-8.
  2. Based on that, try adjusting your route. You could use a regex or an explicit list

.

app.get('/campaña/nueva', sms.nueva)
app.get('/campa%c3%b1a/nueva', sms.nueva)
//Or for convenience if you like
app.get('/' + encodeURIComponent('campaña') + '/nueva', sms.nueva) 

My guess is ultimately most browsers are going to send the URL-encoded versions, so you can probably get by with just that last version.

like image 191
Peter Lyons Avatar answered Sep 23 '22 13:09

Peter Lyons


I ran into the same problem with $ in my route. URL encoded character doesn't work in my case, but escaped one works.

So I ended up with

app.get('/\\$myRoute', function (req, res) {

}
like image 6
Blackus Avatar answered Sep 21 '22 13:09

Blackus