Проблема с пробелами перед doctype - PullRequest
5 голосов
/ 20 января 2011

У меня возникла странная проблема, когда у меня есть 2 копии одного и того же сайта в 2 разных папках.В одной из этих 2-х копий есть пробел перед объявлением doctype, поэтому у меня проблемы с работой в facebook, так как документ неправильно отформатирован.

До html есть некоторые вычисления php, но нет эхо-операторов или чего-то еще.

Что может быть причиной для 2 сайтов identique на одном сервере в разных папках, одна из которых имеет эту проблему?

Ответы [ 8 ]

10 голосов
/ 20 января 2011

Я почти уверен, что у вас есть пробел в конце включения PHP.Сначала проверьте.

Пример:

<?php
    // header file
    include 'other_file.php';
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"><!-- etc.  -->

Затем

<?php
    // other_file.php
    // connects to database, or something,
    // but notice the whitespace after the closing tag
?>



... pretend this text isn't here

В конце я добавил примечание, чтобы получить редактор уценки stackoverflow, чтобы показать дополнительные строки послезакрывающий тег ?>PHP автоматически усекает один символ новой строки после включения тега, но если у вас их несколько, они будут интерпретироваться как пробел перед объявлением типа документа.

Самое простое исправление?Удалите закрывающий тег ?> из всех ваших включений.Это действительный метод , и он может быть самым быстрым для вас способом начать работу.

1 голос
/ 20 января 2011

Вы не говорите, с каким браузером у вас проблемы.IE проверял первые несколько букв страницы на наличие типа документа и, если он не совпадает (например, с пробелами), он переходил в режим причуд.

0 голосов
/ 02 января 2014

Я только что потратил день на решение этой проблемы, когда мои библиотеки нормально работали на статических страницах, но в динамической системе с главным сценарием в начале (apache mod_write переписывал все в главный сценарий) браузер переключился в режим обратного сжатия (js: alert (document.compatMode ())) и исказил мой стиль. Все мои подключаемые файлы были правильно завершены, никаких эхосигналов и т. Д. Проблема? Пустая строка над открывающим <? Php основного скрипта ....... </p>

0 голосов
/ 12 июля 2013

Я столкнулся с этим, где разрыв строки был выше Doctype.Я попробовал несколько вещей, а потом просто поместил doctype в php.

<?php
echo '<!DOCTYPE html>';
... other php code/includes/etc ...
?>
<html>
... other html elements ...

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

0 голосов
/ 22 апреля 2013

В моем случае это работает нормально:

$ brew update
$ brew install coreutils
$ cd directoryWithSymfony2Project
$ for file in $(find ./ -name '*.twig' -or -name '*.php'); do sed `echo -e 's/[\xC2\xA0]//g'` $file > temp; echo 'Processing ' $file;rm $file; mv temp $file; done 
0 голосов
/ 10 июля 2012

Вы можете не верить, но у меня есть ВОЛШЕБНЫЙ способ решения этой проблемы:

Загрузите ваши документы (которые включены до <!DOCTYPE) на ваш хост с помощью файлового менеджера CPanel, затем выберите документ иНажмите «Изменить», чтобы увидеть исходный код документа. Затем нажмите Ctrl + Домой , затем нажмите Удалить !

Вы увидите, что ничего не будет удалено, кроме этого скрытого белогопространство!!Сохраните документ, и вы заметите, что теперь все в порядке.

Я делаю это для всех своих проектов

0 голосов
/ 20 января 2011

вы где-нибудь используете session_start () или header ()?тогда (без использования внешней буферизации) никакие пробелы или другие символы не разрешено отправлять клиенту перед выполнением этой функции.

0 голосов
/ 20 января 2011

Это особенно распространено, если вы используете include.Внимательно проверьте все ваши файлы включений или другие php-файлы, которые находятся перед вашим выводом или заголовками.

<?
   echo "php here"; 
?>

This will cause a problem if it's in an includes
that comes before your headers or doctypes. 
Remove any non php here, file should end with "?>"
not whitespace, linefeeds or characters.

А почему?Неизвестно, что на одном рабочем сервере эта проблема постоянно поднимает мне голову (CentOs 5), но на моей машине разработчика (последняя версия Fedora) этого не происходит, и у меня нет проблем.

Честно говоря, возможно, что-то я мог быпроследите, чтобы выяснить, почему, но поскольку правильное использование говорит: «без лишних пробелов и строк», я просто делаю это и не слишком беспокоюсь о том, «почему на моих серверах это обрабатывается по-разному».(Вид отговорка, я знаю)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...