On 28 Jul 2006, at 18:10, Taylor R Campbell wrote:
S-XML:PRINT-STRING-XML does do certain escaping, but some code points are invalid even if escaped as entity references. The particular problem I had was that lisppaste was sending me the contents of a paste with an ASCII form feed character, i.e. U+0C, which is not allowed in well-formed XML, even as an entity reference -- that is, the XML specification forbids . To get around this, any XML-RPC message containing such a character (or any character below U+0C that is not U+09, U+0A, or U+0D) must be base64-encoded first.
CL-USER> (s-xml:print-xml-string (string (code-char #x0C))) "" CL-USER> (s-xml-rpc::encode-xml-rpc-value (string (code-char #x0C)) t) <value><string></string></value> "</value>" CL-USER>
S-XML:PRINT-XML-STRING should signal an error if any such characters are encountered, and S-XML-RPC::ENCODE-XML-RPC-VALUE should instead base64-encode the string and generate this output:
<value><base64>DA==</base64></value>
Where exactly in the XML-RPC spec does it say this ? I never saw something like that. From my point of view, the XML-RPC spec is softer and more down to earth than others. This is both a strong as well as a weak point. I also find their use of XML as being simplified as well.
If what you say is correct (and it looks that way), then I like XML even less than before ;-) This would make any serialization of string overly complex, for any language or encoding. Applying this change would kill some of my code is border cases. Maybe we could add something like a 'strict' flag to toggle the behavior you suggest.
Sven