Ошибка 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.
Ответы
Ответ 1
&
в XML начинается сущность. Поскольку вы не определили сущность &WhateverIsAfterThat
, возникает ошибка. Вам следует избегать этого с помощью &
.
$string = str_replace('&', '&', $string);
Как избежать амперсандов в XML
Чтобы избежать других зарезервированных символов:
function xmlEscape($string) {
return str_replace(array('&', '<', '>', '\'', '"'), array('&', '<', '>', ''', '"'), $string);
}
Ответ 2
Вам нужно либо превратить &
в его сущность &
, либо обернуть содержимое в тегах CDATA.
Если вы выбираете маршрут объекта, есть дополнительные символы, которые вам нужно превратить в сущности:
> >
< <
' '
" "
Фон: Остерегайтесь амперсанда при использовании XML
Википедия: Список ссылок символов XML-символов