Как остановить ZF от отправки пустого символа в начале? - PullRequest
2 голосов
/ 26 июля 2011

Я занимаюсь разработкой приложения с использованием ZF, у которого есть REST API. Все идет хорошо, за исключением того, что мой XML имеет пустой символ в начале, и поэтому XML нарушает правила наличия объявления XML в начале. Я пытаюсь использовать это с помощью javascript / jquery, и я получаю следующую ошибку на консоли Firebug:

Ошибка синтаксического анализа XML: XML или текстовое объявление не в начале объекта

В SO и других местах в Интернете есть ряд постов, в которых обсуждается это. Это связано с буферизацией вывода, и я попытался использовать ob_flush и flush, как предложено в другом месте, но я просто не могу понять, как это сделать, так как эти посты не упоминают, куда они должны идти. Может быть, я не понимаю правильную буферизацию вывода, но может кто-нибудь сказать мне, где именно мне нужно поместить эти вызовы, чтобы удалить этот пустой символ?

Я бы очень признателен за ответ, поскольку я потратил немало часов на это сейчас (мне потребовалось немало времени, чтобы понять, что это была проблема в первую очередь), и я схожу с ума от этого! LOL!

Спасибо

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Вы, вероятно, сохранили свои файлы PHP, закодированные как UTF-8, с меткой порядка байтов (BOM). Попробуйте сохранить ваши файлы PHP, закодированные как UTF-8 без спецификации. Расширенные текстовые редакторы, такие как Notepad ++ в Windows, TextWrangler в Mac OS или большинство других расширенных текстовых редакторов, имеют такую ​​функцию.

Другая возможность состоит в том, что у вас есть непреднамеренные пробельные символы перед любым <?php в ваших файлах PHP, например, в этом примере одного файла PHP:

 <-- here for instance
<?php
  /*
    some code to generate $yourXml;
  */
?>
 <-- or here
<?php
  echo $yourXml;
?>

... или другие непреднамеренные пробельные символы, выводимые вашим PHP-кодом.

Если вы позаботились о подобных проблемах, тогда нет необходимости в буферизации вывода. Использование буферизации вывода в качестве средства для обхода этих типов проблем является небрежной привычкой кодирования.

редактировать
Возможно, это не решит проблему, если подумать.

0 голосов
/ 27 июля 2011
echo trim($yourXml); 

Вы можете сделать это просто:)

...