XML error at ampersand (&)

database, html, mysql, php, xml

Solution

`&` in XML starts an entity. As you haven't defined an entity `&WhateverIsAfterThat` an error is thrown. You should escape it with `&`.

$string = str_replace('&', '&', $string);

How do I escape ampersands in XML

To escape the other reserved characters:

function xmlEscape($string) {
    return str_replace(array('&', '<', '>', '\'', '"'), array('&amp;', '&lt;', '&gt;', '&apos;', '&quot;'), $string);
}

Problem

I have a php file which prints an xml based on a MySql db. I get an error every time at exactly the point where there is an & sign. Here is some php: ``` $query = mysql_query($sql); $_xmlrows = ''; while ($row = mysql_fetch_array($query)) { $_xmlrows .= xmlrowtemplate($row); } function xmlrowtemplate($dbrow){ return "<AD> <CATEGORY>".$dbrow['category']."</CATEGORY> </AD> } ``` The output is what I want, i.e. the file outputs the correct category, but still gives an error. The error says: xmlParseEntityRef: no name And then it points to the exact character which is a & sign. This complains only if the `$dbrow['category']` is something with an & sign in it, for example: "cars & trucks", or "computers & telephones". Anybody know what the problem is? BTW: I have the encoding set to UTF-8 in all documents, as well as the xml output.

Original source

Related problems