Re: XML. Prevent < from turning into <
| From: | Ralph Deffke | Date: | Wed, 09 Sep 2009 19:03:42 +0000 |
| Subject: | Re: XML. Prevent < from turning into < | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-297842@lists.php.net to get a copy of this message | ||
give it a try with PDATA instead of CDATA and see what happns
"Ashley Sheridan" <ash@ashleysheridan.co.uk> wrote in message
news:1252512252.2961.40.camel@localhost...
> On Wed, 2009-09-09 at 16:51 +0100, Matthew Croud wrote:
> > On 9 Sep 2009, at 16:37, Ashley Sheridan wrote:
> >
> > > On Wed, 2009-09-09 at 15:14 +0100, Matthew Croud wrote:
> > >> On 9 Sep 2009, at 15:09, Ashley Sheridan wrote:
> > >>
> > >>> On Wed, 2009-09-09 at 14:46 +0100, Matthew Croud wrote:
> > >>>> On 9 Sep 2009, at 14:36, Bob McConnell wrote:
> > >>>>
> > >>>>> From: Bastien Koert
> > >>>>>> On Wed, Sep 9, 2009 at 5:27 AM, Matthew
> > >>>>>> Croud<matt@obviousdigital.com> wrote:
> > >>>>>>>
> > >>>>>>> Hiya,
> > >>>>>>> I'm writing an app that let's my client upload
> > >>>>>>> images, the image
> > >>>>>>> html code
> > >>>>>>> is added to an XML file.
> > >>>>>>> Take a look at the <image> element below:
> > >>>>>>>
> > >>>>>>> <item Code="e1022">
> > >>>>>>> <code>e1022</code>
> > >>>>>>> <image><![CDATA[<img
> > >>>>>>> src="uploads/image2.jpg" alt="Homepage
> > >>>>>>> Image"
> > >>>>>>> width="124" height="70"
> > >>>>>>> />]]></image>
> > >>>>>>> <name>Blue Ski Trousers</name>
> > >>>>>>> <price>8.99</price>
> > >>>>>>> </item>
> > >>>>>>>
> > >>>>>>> Now, whenever PHP writes this to the XML files, it turns the
> > >>>>>>> <
> > >>>>>>> and
> > >>>>>>>> into
> > >>>>>>> < and > . which means it does not display on
> > >>>>>>> the webpage.
> > >>>>>>> How can I
> > >>>>>>> prevent this from happening ?
> > >>>>>>>
> > >>>>>>
> > >>>>>> str_replace?
> > >>>>>>
> > >>>>>
> > >>>>> Does the xml string get passed to htmlentities() or a similar
> > >>>>> function before it is sent to the browser? That would explain the
> > >>>>> substitutions. I saw an xmlentities() variation mentioned
> > >>>>> somewhere.
> > >>>>>
> > >>>>> Bob McConnell
> > >>>>>
> > >>>>> --
> > >>>>> PHP General Mailing List (http://www.php.net/)
> > >>>>> To unsubscribe, visit:
> > >>>>> http://www.php.net/unsub.php
> > >>>>>
> > >>>>
> > >>>>
> > >>>> Hi Bob,
> > >>>>
> > >>>> Nope the string doesn't get passed into any function.
> > >>>> Here is the XML:
> > >>>> _________________________________________________________________
> > >>>>
> > >>>> <?xml version="1.0" encoding="UTF-8"?>
> > >>>> <clothes>
> > >>>>
> > >>>> <item Code="e1021">
> > >>>> <code>e1021</code>
> > >>>> <image><![CDATA[<img src="uploads/image1.jpg"
> > >>>> alt="Homepage
> > >>>> Image" width="124" height="70"
> > >>>> border="1"
> > >>>> onclick="MM_openBrWindow('uploads/
> > >>>>
> > >>>> image1.jpg','Preview','width=680,height=520')"
> > >>>> />]]></image>
> > >>>> <name>Red Jacket</name>
> > >>>> <desc>An adult sized red jacket</desc>
> > >>>> <size>adult</size>
> > >>>> <price>12.99</price>
> > >>>> </item>
> > >>>>
> > >>>> <item Code="e1022">
> > >>>> <code>e1022</code>
> > >>>> <image><![CDATA[<img src="uploads/image2.jpg"
> > >>>> alt="Homepage
> > >>>> Image" width="124" height="70"
> > >>>> border="1"
> > >>>> onclick="MM_openBrWindow('uploads/
> > >>>>
> > >>>> image2.jpg','Preview','width=680,height=520')"
> > >>>> />]]></image>
> > >>>> <name>Blue Ski Trousers</name>
> > >>>> <desc>A pair of Blue Ski Trousers</desc>
> > >>>> <size>child</size>
> > >>>> <price>8.99</price>
> > >>>> </item>
> > >>>>
> > >>>> </clothes>
> > >>>>
> > >>>> ________________________________________________________________
> > >>>>
> > >>>> Now the image tags I have written here I have done manually, but
> > >>>> when
> > >>>> I use PHP using DOM they come out like this (note the image
> > >>>> element):
> > >>>>
> > >>>> <item Code="e1024">
> > >>>> <code>e1024</code>
> > >>>> <image><![CDATA[<img
> > >>>> src="uploads/image4.jpg" alt="Homepage
> > >>>> Image" width="124" height="70"
> > >>>> border="1"
> > >>>> onclick="MM_openBrWindow('uploads/
> > >>>>
> > >>>> image4.jpg','Preview','width=680,height=520')"
> > >>>> />]]></image>
> > >>>> <name>orange top</name>
> > >>>> <desc>an orange jacket</desc>
> > >>>> <size>large</size>
> > >>>> <price>14.50</price>
> > >>>> </item>
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>> Matthew Croud
> > >>>> Studio
> > >>>>
> > >>>> Obvious Print Solutions Limited
> > >>>> Unit 3 Abbeygate Court
> > >>>> Stockett Lane
> > >>>> Maidstone
> > >>>> Kent
> > >>>> ME15 0PP
> > >>>>
> > >>>> T | 0845 094 9704
> > >>>> F | 0845 094 9705
> > >>>> www.obviousprint.com
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>> I've not experienced this with using any DOM functions, but if we
> > >>> can
> > >>> see your code it might help us.
> > >>>
> > >>> Thanks,
> > >>> Ash
> > >>> http://www.ashleysheridan.co.uk
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> PHP General Mailing List (http://www.php.net/)
> > >>> To unsubscribe, visit:
> > >>> http://www.php.net/unsub.php
> > >>>
> > >>
> > >>
> > >>
> > >>
> > >> Well i'll pop the PHP down here, i'll trim it as much as i can:
> > >>
________________________________________________________________________
> > >>
> > >> $code = $_POST['code'];
> > >> $name = $_POST['name'];
> > >> $desc = $_POST['desc'];
> > >> $size = $_POST['size'];
> > >> $price = $_POST['price'];
> > >>
> > >>
> > >> #load an XML document into the DOM
> > >>
> > >> $dom = new DomDocument();
> > >> $dom -> load("items.xml");
> > >>
> > >> #create elements
> > >>
> > >> $Xitem = $dom -> createElement("item");
> > >> $Xcode = $dom -> createElement("code");
> > >> $Ximage = $dom -> createElement("image");
> > >> $Xname = $dom -> createElement("name");
> > >> $Xdesc = $dom -> createElement("desc");
> > >> $Xsize = $dom -> createElement("size");
> > >> $Xprice = $dom -> createElement("price");
> > >>
> > >> #create text nodes
> > >>
> > >> $Xcodetext = $dom -> createTextNode($code);
> > >> $Ximagetext = $dom -> createTextNode( "<![CDATA[<img
> > >> src=\"uploads/
> > >> $UploadName\" alt=\"Homepage Image\" width=\"124\"
> > >> height=\"70\"
> > >> border=\"1\" onclick=\"MM_openBrWindow('uploads/
> > >> $UploadName','Preview','width=680,height=520')\"
> > >> />]]>" );
> > >> $Xnametext = $dom -> createTextNode($name);
> > >> $Xdesctext = $dom -> createTextNode($desc);
> > >> $Xsizetext = $dom -> createTextNode($size);
> > >> $Xpricetext = $dom -> createTextNode($price);
> > >>
> > >> #append the text nodes to the inner nested elements
> > >>
> > >> $Xcode -> appendChild($Xcodetext);
> > >> $Ximage -> appendChild($Ximagetext);
> > >> $Xname -> appendChild($Xnametext);
> > >> $Xdesc -> appendChild($Xdesctext);
> > >> $Xsize -> appendChild($Xsizetext);
> > >> $Xprice -> appendChild($Xpricetext);
> > >>
> > >> #append the inner nested elements to the <item> element
> > >>
> > >> $Xitem -> appendChild($Xcode);
> > >> $Xitem -> appendChild($Ximage);
> > >> $Xitem -> appendChild($Xname);
> > >> $Xitem -> appendChild($Xdesc);
> > >> $Xitem -> appendChild($Xsize);
> > >> $Xitem -> appendChild($Xprice);
> > >> $Xitem -> setAttribute("Code",$code);
> > >>
> > >> #append the <title> element to the root element
> > >>
> > >> $dom -> documentElement -> appendChild($Xitem);
> > >>
> > >> #create a new enlarged xml document
> > >>
> > >> $dom -> save("items.xml");
> > >>
> > >> _____________________________________________________
> > > It looks like it's because you are creating an image object by
> > > appending
> > > a text node inside CDATA to it. My guess is that a text node will have
> > > the contents automatically made 'safe' for the XML entities which
> > > are <,
> > >> , &, etc.
> > >
> > > Why are you appending the child item like this? What's wrong with
> > > adding
> > > it as a proper object, attributes and all?
> > >
> > > Thanks,
> > > Ash
> > > http://www.ashleysheridan.co.uk
> > >
> > >
> > >
> >
> >
> > Hi Ash,
> >
> > Thanks for getting back to me,
> > In all honesty this method is what's implemented in the course book
> > i've been following.
> >
> > I been using XML longer and i've never had this issue using image tags
> > before and getting the output I expected.
> > Is there a way around this safety mechanism ? Otherwise i'll have to
> > think of another way of doing this.
> >
> > Cheers.
> >
>
> Just create the image tag using the same methods as you're creating the
> other nodes. So the image object would contain several attribute nodes,
> but would have no regular child nodes of its own.
>
> Thanks,
> Ash
> http://www.ashleysheridan.co.uk
>
>
>