Hi Matthew,
I'm trying to embed some html in a array returned from a function
that is used by Zend_Xml_Rpc_Server and having erratic results.
Sometimes it works and sometimes it doesn't but I'm not sure how to
specify the content in any way. For example in the example code I
tried things like htmlentities() or...
'<![CDATA[' . $content->body . ']]>',
...but in many cases (particularly with tricky html) the description
ends up as an empty string.
Oof. I've never tried sending HTML back in my XML-RPC responses
before.
The problem you run into, as you're noting, is that you're wrapping
the
HTML in XML, which is always problematic -- you need to use
entities, or
CDATA, and I'm not entirely sure XML-RPC will play well with CDATA
anyways.
What I am working on is the blogger and metaweblog api's to use
desktop editors for "blog" content so sending the html is really the
key. I have ...on a quick Googling... found examples of using CDATA
in xml-rpc:
http://blogger-bee.com/index.php/XML-RPC_spell_checker
Try base64-encoding the HTML. This will mean extra work on the
receiving
end, but should make it safe enough to pass embedded in the XML-RPC
(which, I believe, may have been one of the rationale's behind
having a
'base64' XML-RPC type in the first place).
I did try using the native php base64 encoding but the problem there
is that I cannot control the receiving end and within the struct it's
still treated as a string. I also tried...
'description' => new Zend_XmlRpc_Value_Base64($row->body),
...however that still seems to end up being sent as a string when it
should presumably be wrapped in the <base64> element so that the
receiving end knows how to treat it. Is there a way to specify types
within an array to be struct'd ?
I then wondered if perhaps it was an encoding issue as I see strings
are htmlentitie-d with UTF-8 so I tried setting the response as UTF-8
but still no luck.
Just to clarify:
The html (not full html since it's just part of the page) data is
being pulled from a MySQL field "body" of type "text" and added to
the array. The rendered html shows up fine for all rows if I call the
function directly ($metaweblog->getRecentPosts/getPost) but if called
via the xmlrpc server 6 out of the 39 samples come out as empty strings.
Having failed with all my attempts to narrow this down so far I'd
appreciate any clues you may have as to where to look really. I've
been scouring the various Zend_XmlRpc_Value_* classes but not found
any specific reason so far.
Thanks for your help so far,
Nick