Подтвердить что ты не робот

Ошибка XML в амперсанде (&)

У меня есть php файл, который печатает xml на основе MySql db.

Я получаю ошибку каждый раз точно в точке, где есть знак &.

Вот несколько 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>
  }

Результат - это то, что я хочу, т.е. файл выводит правильную категорию, но все же дает ошибку.

Ошибка говорит: xmlParseEntityRef: no name

И затем он указывает на точный символ, который является знаком &.

Это жалуется только на то, что $dbrow['category'] - это что-то со знаком &, например: " автомобили и грузовики" или " компьютеры и телефоны".

Кто-нибудь знает, в чем проблема?

BTW: У меня кодировка установлена ​​в UTF-8 во всех документах, а также на выходе xml.

4b9b3361

Ответ 1

& в XML начинается сущность. Поскольку вы не определили сущность &WhateverIsAfterThat, возникает ошибка. Вам следует избегать этого с помощью &amp;.

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

Как избежать амперсандов в XML

Чтобы избежать других зарезервированных символов:

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

Ответ 2

Вам нужно либо превратить & в его сущность &amp;, либо обернуть содержимое в тегах CDATA.

Если вы выбираете маршрут объекта, есть дополнительные символы, которые вам нужно превратить в сущности:

>  &gt;
<  &lt;
'  &apos;
"  &quot;

Фон: Остерегайтесь амперсанда при использовании XML

Википедия: Список ссылок символов XML-символов