Перевод строки неожиданно появляется в PHP

Последние несколько часов я рвал на себе волосы, пытаясь найти решение этой проблемы. Я отправляю запрос AJAX, который, до некоторых незначительных изменений, работал отлично, возвращая прекрасный полезный символ в Javascript. Однако теперь возвращается \r\n, и я потратил слишком много времени на его отслеживание. Мой последний способ найти, где он был включен, заключался в том, чтобы буквально повторять «OMG» в разных местах моих скриптов, пока он не появился в строке 2 HTML вместо строки 1. Вот скрипт-нарушитель:

// Import Global Game Variables
include('../engine/engine_core_functions.php');

// Convert our gamestate(gameID)
//$curGamestate = getCurrentGamestate($gameID);

// Make sure it's a valid turn
if(isMyTurn()) {
    // Draw a card from the card drawing mechanism
    $cardValue = drawCard();
    $cardValue = str_replace("\r", 'R', $cardValue);
    echo $cardValue;
}
else echo 'Error 3';

Пропуск строки происходит сразу после включаемого файла вверху. Перед включением нет переноса строки, после включения перенос строки. Итак, я иду к включаемому файлу. Размещение моего

echo 'OMG!';

в САМОМ КОНЦЕ включаемого файла НЕ приводит к разрыву строки. Это заставило меня поверить, что включение файла может (почему !?) привести к разрыву строки (сейчас 5 утра...). Тем не менее, есть несколько включенных файлов в верхней части включенного файла-нарушителя. Ни один из них не создает разрывов. Весь «engine_core_functions.php» вообще не генерирует разрывов строк.

Однако разрыв появляется, когда он включен в показанный выше сценарий. Излишне говорить, что я сбит с толку и крайне раздражен. Я мог бы просто удалить оскорбительные символы (через PHP или Javascript), но меня это раздражает, потому что я не могу решить корень проблемы. Пожалуйста, помогите, спасибо.


person Daniel Gast    schedule 19.02.2013    source источник
comment
Проверить перевод строки после закрытия тега php в ../engine/engine_core_functions.php   -  person madfriend    schedule 19.02.2013
comment
Убедились ли вы, что у вас нет никаких символов (пробелов, разрыва строки) до <?php или после ?> в файлах PHP?   -  person jensgram    schedule 19.02.2013


Ответы (1)


У вас может быть какая-то невидимая метка спецификации в начале вашего файла или что-то еще. Всегда позволяйте <? или <?php быть первой строкой ваших файлов PHP и возьмите за правило НЕ заканчивать весь файл PHP ?>, если он будет включен в другой файл.

person silkfire    schedule 19.02.2013
comment
Благодаря вышеперечисленным участникам я на самом деле только что заметил еще один вопрос с правой стороны, в котором была точно моя проблема (и, кстати, решение). У меня было несколько оскорбительных пробелов чуть ниже закрывающего тега php в файле engine_core_functions.php. Большое спасибо за участие! stackoverflow.com/questions/13892722/ - person Daniel Gast; 19.02.2013
comment
У меня была эта проблема при выводе вложения файла с использованием fopen('php://output', 'w') - спецификации UTF-8 предшествовал символ перевода строки! Согласно ответу здесь, наличие закрывающего тега ?> и последующей пустой строки было причиной моей проблемы, хотя это было не в файле PHP, откуда возникла проблема, а скорее в файле контроллера выше стека. Обязательно проверьте ВСЕ файлы PHP, участвующие в обслуживании запроса! - person John Rix; 27.09.2016