« P revious
No. 690
N ext »
Solving MIME type headaches 2007-10-23T10:09:38Z
My site occasionally serves invalid XML. This is an unfortunate business. The reasons are quite convoluted, but are to do with the way that you can't use CDATA sections inside attributes (Kosso will understand what I'm talking about).
So sometimes unencoded stuff is sent to the browser, or, as this morning, an unclosed span element.
I decided to fix it by writing some code that would detect whether what's about to be sent is valid XML. Simple enough. Just load it all into a DOM tree, and if it chokes on loading, it's not valid XML - then serve it as text/html to invoke the usually slower XHTML parsers.
Here's the code . It's done with PHP output control and the DOM - so PHP5 only, folks. You do use PHP5, right?
Please enable JavaScript to view the comments powered by Disqus. blog comments powered by
Tom Morris
9f4907d871750fd4c9b9bad7086701b51d6abd10
bd9f81a05283ed85e699175ed057b4a497f20b77
802c68123e12bf69d99a25a87cef360f18813fe4
tom@tommorris.org
Currently in:
Kent, England
Usually in:
East Sussex ,
England
I am a vegetarian ,
an atheist ,
like to code in Ruby and
Scala (and Java, but let’s not talk about that), and
noodle about with microformats
and the Semantic Web .
I have
an MA in
philosophy from Heythrop College ,
University of London . My philosophical interests are in analytic metaphysics,
ontology, modality, the work of Armstrong ,
Lewis ,
Kripke ,
Russell and
Plato .
I have a strange, unfulfilled interest in
Gadamer’s
hermeneutics . I’ve been influenced
by Gadamer, by Kierkegaard ,
Nietzsche ,
Rawls and
Nozick .
Musically, I like
jazz fusion, soul and P-Funk. My musical nirvana would be a mixture of Beethoven , Miles Davis and George Clinton
topped with a side-serving of Erykah , Jill and Angie .
I also write for the Citizendium , an online encyclopedia project. If you know about stuff, you should join in. I occasionally produce audio recordings for The Pod Delusion .
Elsewhere:
PGP
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=dHOI
GPG Key
del.icio.us
Flickr
Twitter
Jaiku
LinkedIn
ma.gnolia
blip.tv
upcoming.org
MetaFilter
LiveJournal
CiteULike
Technorati Profile
Subscribe:
RDF