On Mon, Apr 28, 2008 at 9:40 AM, Ian Bicking <[EMAIL PROTECTED]> wrote: > > Michael van Tellingen wrote: > > Hi there, > > > > I was looking at the modeltags feature in the new webhelpers. > > Unfortunately it only renders tags in XHTML mode. Since I prefer not to > > use that (see > > http://webkit.org/blog/68/understanding-html-xml-and-xhtml/) i've added > > a flag to the webhelpers.html.HTMLBuilder to render it as HTML. > > We decided this was the easiest way as the code produced is both valid > HTML and XHTML. It produces warnings when validated as HTML, but no > errors, and I don't think any clients have problems with it when parsing > it as HTML. > > Specifically, all empty tags (br, input, etc) get a trailing />, making > them valid XHTML. All other tags always have open and close tags, which > are equivalent in HTML and XHTML (i.e., it never produces <script />).
The problem of two formats cascades through the simplest helpers to the complex functions that depend on them. Do you pass an argument through all of them to choose the output style? How do you know whether your arguments are HTML or XHTML? It's the same problem caused by the str/unicode split in Python: the dilemma cascades up to every function that uses strings. Are my arguments str or unicode or mixed? Should that affect my output, or should I just ignore the problem? If I ignore it my users will get UnicodeDecodeError or UnicodeEncodeError whenever a string contains non-ASCII characters. It gets worse if you have a Unicode subclass, as WebHelpers/Genshi/Quixote do to implement start HTML escaping. It works great if your arguments are Unicode, but what if they're str and contain non-ASCII characters? This came up last week when redirect_to() blew up because url_for() was returning a literal, which it shouldn't have. (Literal is a Unicode subclass, but redirect_to() can't accept Unicode.) If you want a choice of well-formed HTML or well-formed XHTML, use Genshi. It does this natively. >From one of the talkbacks in the article: """ I've argued with Anne, Faruk and other webheads on this topic often enough. The problem is that at one time the "guru's", I use the term loosely, compelled us to use XHTML and now we're back to HTML. Somebody make there mind up! The fact is, and this post actually suggests this already, is that it doesn't really matter that much. Just as long you make an informed choice. Writing XHTML is fine just be aware of the pitfalls. """ That's the situation we're left with. Write XHTML but serve it as text/html. Then when XHTML or HTML 5 get implemented in all browsers, we can simply switch the default doctype and avoid reformatting our templates. I really wish HTML 5 would just be implemented now, both so it can blow XHTML away and also because it provides standard calendar tags and navigation tags, which will eliminate some of the need for custom Javascript. I also feel kind of deceived that the XHTML mantra said it would lead to a brave new world but instead it has fallen flat. I started reformatting my <br /> as <br> to be valid but ended up switching them back on the off-chance it'll avoid reformatting work someday. In the meantime, the main rule for serving XHTML as HTML is, as Ian alluded to above: use the minimized syntax only on tags that can never carry content: <br /> <img />. But if the tag can carry content, use the non-minimized form: <script></script>. Otherwise browsers will think it's still open and they'll misinterpret the following HTML, often with spectacularly bad results. -- Mike Orr <[EMAIL PROTECTED]> --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "pylons-devel" group. To post to this group, send email to pylons-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/pylons-devel?hl=en -~----------~----~----~----~------~----~------~--~---