2011-09-28 3 views
5

Я использую PHP для вывода пользовательского XML на основе значений, хранящихся в базе данных MySQL. У меня есть следующий в начале условия:Объявление XML не играет хорошо с PHP

echo '<?xml version="1.0" encoding="UTF-8"?>'; 

(я также попробовал этот вариант:.

echo "<?xml version='1.0' encoding='UTF-8'?>"; 

без толка)

Однако, это всегда выводится (в каждом браузере и даже при просмотре в качестве загруженного файла из wget) как:

<?xml version=1.0 encoding=UTF-8 ?> 

Где-то вдоль линии одинарные кавычки вокруг номера версии и кодировки были отброшены. Где я ошибся и что могу сделать, чтобы исправить это? Я получаю ошибки от своего парсера, и я считаю, что это потому, что это объявление не соответствует стандарту XML, содержащему одинарные или двойные кавычки вокруг этих значений.

+1

Это действительно странно, что PHP будет падением котировок, но даже при этом вы должны использовать двойные кавычки isntead одинарных кавычек для XML-документов. – regality

+0

Hmph. Все тот же результат, но я думаю, вы правы в использовании двойных кавычек. – esqew

+0

Звучит для меня как какой-то выходной пост-обработки. У меня нет опыта в этом, но возможно что-то вроде 'tidy.clean_output = On' в настройках' ini'? Кажется маловероятным, что 'Tidy' удалял кавычки вместо того, чтобы добавлять их, но кто знает. Возможно, какой-то подобный инструмент для пост-обработки настроен на настройку вашего сервера. (Будьте пост-обработкой PHP, пост-обработки, сделанной вашим веб-сервером). –

ответ

1

Я думаю, это связано с тем, что тип содержимого вашего документа уже установлен в text/html (по умолчанию php).

Решение этого заключается в том, чтобы установить это как заголовок, а не эхо его.

например:

header ("Content-Type:text/xml"); 

установить кодировку:

header('Content-Type: text/xml; charset=utf-8'); 

И убедитесь, что вы установили это перед выходом (эхо) что-нибудь еще.

Надежда, что помогает :)

+1

Это полностью не объясняет автоматическое удаление котировок. – Evert

Смежные вопросы