[whatwg] Proposal for improved handling of '#' inside of data URIs

On 09/10/2011 04:53 PM, Nils Dagsson Moskopp wrote:
 >> Browsers handle the "#" character in data URIs very differently, and
 >> the arguably "correct" behavior is probably not what authors actually
 >> want in many cases.
 > Do you have any evidence for that assertion, e.g. author surveys,
 > occurance in sites, number of duplicates in mozilla bugzilla (relative
 > to other common bugs)?

No large-scale data like that, just a few anecdotal reports in IRC of 
Firefox purportedly being "broken" on particular content (that contained 
a "#"), whereas Chromium was "working".  (one instance about a week ago, 
which prompted this proposal)

Plus, a concern that people can *almost* just stick pure HTML/SVG into a 
data URI (see examples below) except for "#" characters which break things.

 > This change would probably have to be communicated to other software
 > working with data URIs (Python's urlparse module comes to mind).

Sure, ultimately. One step at a time.

 > Do you
 > intend to update the RFC on the point or leave that usage
 > non-conforming?

I'm not sure. Right now this is just a proposal for better 
interoperability, but ultimately, yeah, it'd be great to have this 
specified.

 >> Note that in cases where an author *accidentally* includes "#" inside
 >> their data URI (e.g.<body background="#f00">),
 >
 > What's with the unencoded bracket (should be %3C) and space (should be
 > %20) beforehand? Why wouldn't parsing stop at those points?

Those are fine, actually -- but I should have included an actual URI 
that loads in browsers, like the following (this is what I meant):
   data:text/html,<html><body style='background: #f00'>

So to answer your question -- that does render just fine (giant red 
page) in Chromium, without any need to encode the space or the brackets. 
  It also renders fine in Opera if you point an <iframe> at it.  (but 
not if you type it directly into the URLbar -- that's the inconsistency 
on their part that I mentioned in my post)

And in Firefox, it renders fine if you just encode the # character:
   data:text/html,<html><body style="background:%23f00">
(that makes it load fine from Opera's URLbar, too.)

So no -- practically at least, there's no need to encode the >/< or the 
space character.

~Daniel

Received on Saturday, 10 September 2011 18:30:20 UTC