Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

When we implemented URLs for Django our nemesis was Vignette, a popular CMS at the time (~2003) which frequently included commas in long weird URLs.

It's hard to find an example Of one of those now, because the kind of sites that tolerate weird comma-infested URLs in 2003 aren't the kind of sites that meticulously maintain those URLs in working order for 20+ years!



Wow, when I woke up this morning I had no clue that THE Simon Wilson would be replying to my comment!

Right now, I’m knee-deep in coding my Django app. I totally dig how the framework kinda "forces" you to write neat URLs ― it’s one of my favorite things about it. This might seem silly, but I actually take immense pride in crafting simple, elegant URLs, even if the majority of the users won't even notice it.

As for the comma infested URLs, the website of one of the major news outlets in my country manifests such behavior. It always puzzled me as to what tech stack they were using. I'm not sayin they still use it today (as Vignette went belly up in 2009), but this can be a heritage from those days.

I really enjoy using Django since I first got to know it back in the 2.2 days, I’ve used nothing else for my projects, big or small. I’m head over heels for every bit of it and having recommending it for years to my friends!

Big thanks to you, Simon, for helping create this awesome piece of tech!


My recollection of the "old days" may be a bit hazy, but I think comma delimited parameters were a work around for frameworks that did not support multiple values (or users not knowing how to handle it)

Example of a "correct" url

?value=A&value=B&value=C

Complete frameworks would have a method that returned the values as a list. Some like PHP required ugly work arounds where you had to name the parameter using the array syntax: value[]=A&value[]=B&value[]=C

Even if the framework supported multi-values, many preferred the shorter version: value=A,B,C and split the values in code instead


Django actually has a special mechanism for dealing with ?value=&A&value=B

    values = request.GET.getlist("value")
    # values is now ["A", "B"]
We built it that way because we had seen the weird bugs that cropped up with the PHP solution, where passing ?q[]=x to a PHP application that expected ?q=x could result in an array passed to code that expected a string.


I don't know if it's something from the old days or not, but iirc URLs have a semicolon separator (;) that would go before the ?. I have never seen it being used. I'm betting it's even less support than commas!


My understanding is you can use ; instead of both ? And &

Handy if anything actually supported it, because then you could plop parameters on the end of urls without looking to see if there was already a ?

I'm sure it's used somewhere, but I can only remember it being used by Yahoo Link Tracking ;_ylt=y64encodedgunk


Semicolon (;) has no special meaning in a URL. You can ascribe it a meaning in your particular routing, but the spec has nothing to say about it.

https://url.spec.whatwg.org/


In the OG RFC 2396, each _path segment_ can specify parameters similar to query parameters, but using a semicolon to separate them to the main segment value instead of question mark. This has effects e.g. when calculating relative URLs. This is now obsolete, but many URL-parsing libraries have an API for that for compatibility.


The issue is that commas are technically not allowed in the search params without being percent encoded


value[]=A&value[]=B&value[]=C is an idea that apparently came out of PHP in ~2000, not of standards.

So, people who learnt programming in 2000, until ~2010 it's quite normal to see the commas as delimiter of multiple parameters.


As far as I know, the "standard" way is value=A&value=B&value=C. This is what comes out of a plain form submission.


It's Willison.




That's not a "weird, comma-infested URL". That's the title of the page.

The only Cool URI failure on Wikipedia is the ".m" which is added to the mobile view.


one wonders why this is still the case after all these years...


Because Jimmy Wales :didn’t get enough money :(


Wikipedia gets a pass from me because the comma is part of the name of the actual film.


I may have misunderstood your initial comment. Was Vignette a nemesis because letting people migrate to Django from it while preserving URLs involved commas, or was it just a nemesis in general and you're pointing out a flaw in how they did URLs? If the latter then yeah there's no point in me mentioning a mainstream use of commas in URLs.


We just thought that having URLs with obfuscated IDs and multiple commas in them looked really ugly.


I feel like this is something I've seen a lot of in older ASP-based products also.


Django URLs was probably one of the points that made us use it when we finally decided to ditch Vignette around 2007


I'm reminded of HUDOC, where navigating the site gives you URLS such as:

    https://hudoc.echr.coe.int/#{%22documentcollectionid2%22:[%22GRANDCHAMBER%22,%22CHAMBER%22],%22itemid%22:[%22001-230857%22]}
Fortunately, most pages list a "clean" URL that also works: https://hudoc.echr.coe.int/?i=001-230857




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: