Php включает надоедливую верхнюю маржу - PullRequest
7 голосов
/ 13 июня 2009

Я не знаю, почему каждый раз, когда я пытаюсь включить свой заголовок, используя PHP include, есть верхнее поле. Я проверил это с помощью Firebug, и там написано, что сверху есть смещение в 22 пикселя. Кто-нибудь испытывает эту проблему? Я думаю, что это CSS пророчество: top: 22px. Но ничто не может изменить это, даже если я напишу h1 style = "top: 0px; margin-top: 0px;". Я думаю, что это тайна php-CSS, которая никогда не будет разгадана.

edit: Единственный способ избавиться от этого смещения верхнего поля или чего бы то ни было, это добавить следующие свойства в H1: top: 0px; положение: абсолютное;

Будут ли эти свойства создавать больше проблем в будущем?

Есть ли лучший способ решить эту проблему смещения верхнего поля?

edit2: я думаю, что есть проблема с кодировкой. Есть ли конфликт между кодировкой включенного файла (header.html) и индексного файла?

Мой индекс выглядит так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Untitled 1</title>
    <link rel="stylesheet" type="text/css" href="style2.css" />
</head>
<body>
    <div id="page-wrap">
    <?php include_once("header2.html"); ?>
    </div>
</body>
</html>

С этим CSS:

* {
    padding: 0px;
    margin: 0px;
}

Мой header.html (включенный):

<h1>Header 2</h1> 

И вот результат:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Untitled 1</title>
    <link rel="stylesheet" type="text/css" href="style2.css" />
</head>
<body>
    <div id="page-wrap">
    <h1>Header 2</h1>  </div>
</body>
</html>
  • Боже, это так просто, что я действительно не знаю, откуда берется верхнее поле (во всех браузерах).
  • Это происходит только тогда, когда я использую php include.
  • Исходный код выглядит так же, как когда я не использую php include.

Ответы [ 12 ]

16 голосов
/ 14 июня 2009

Это довольно странно, но я скопировал и вставил ваш выходной HTML в Notepad ++, и перед h1 был странный символ. При вставке в Блокнот, h в h1 был подписан.

Поэтому мне кажется, что вы можете иметь ошибочный (или неожиданный для PHP) символ во включенном HTML (или в PHP, включающем его). Моё подозрение? Страшный UTF-8 BOM. Попробуйте изменить кодировку включенного HTML-файла, чтобы исключить спецификацию (с которой у меня всегда были проблемы при работе с PHP).

Редактировать: Да. Только что проверено с помощью шестнадцатеричного редактора. В начале вашего HTML-кода есть метка порядка следования байтов. Я не знаю, какой редактор вы используете, но у вас должна быть возможность изменить настройки кодировки текста.

См. this для получения дополнительной информации о PHP и спецификации.

3 голосов
/ 13 июня 2009

Вам следует опубликовать свой сгенерированный HTML, например, скопировав то, что вы видите, когда выбираете «Просмотр источника» в веб-браузере. Часто я видел загадочные пустые строки в сгенерированном PHP HTML, потому что PHP настроен на вывод ошибок и предупреждений. Даже если это не вызвано этим, мы можем легче диагностировать проблему, если увидим выведенный HTML.

1 голос
/ 14 июня 2009

Часто дополнительная строка появляется в конце файла сценария PHP, который вы включаете после тега?>. Это приведет к добавлению дополнительного символа в сгенерированный вывод. Вы можете решить эту проблему, не закрывая тег?> В самом конце вашего файла. PHP знает, что «предположить», что он закрыт.

1 голос
/ 13 июня 2009

Я бы поспорил, что это не имеет ничего общего с PHP, включая его сам. Как уже упоминалось ранее, во включенном файле может быть какая-то css, которая делает это, но я никогда не видел php ничего подобного тому, что вы описываете.

Я бы посмотрел на объявление doctype [временно удалите его, чтобы посмотреть, что произойдет], и удалите текущий тег объявления html и замените его простым тегом [снова просто временно, для отладки]

1 голос
/ 13 июня 2009

ну, не зная, что входит в ваш php, трудно сказать, но убедитесь, что внутри него нет CSS. также убедитесь, что загружаемый вами CSS найден и загружен. я отлаживаю, изменяя цвет фона или что-то еще визуальное, чтобы вы могли быть уверены, что он загружается.

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

У меня была однажды эта проблема, и вот способ ее исправить - это действительно проблема в кодировке. Я потратил 10 часов, чтобы найти ее. В моей ситуации я изменяю кодировку для всех php-файлов (все php-файлы, все tpl-файлы (если есть)) с UTF-8 на UTF-8 без использования bom, сохраняю и пытаюсь потом. После этого вы также можете сделать в .htaccess строку «AddDefaultCharset UTF-8».

0 голосов
/ 01 июля 2012

Я использую блокнот, и я выбрал в меню -> Кодировка-> Кодировка с UTF-8 без спецификации, и все работало просто отлично. Это должно быть сделано для каждого включенного файла. Я думаю, что это решение вашей проблемы. Хорошего вечера.

0 голосов
/ 14 февраля 2012

У меня возникла та же проблема ... поэтому я решил добавить html-комментарий в начале первого файла и html-комментарий в начале второго файла. Это включает спецификацию (или все, что появляется между файлами) внутри комментария, поэтому она не выводится в html.

Например:

#header.php
<?php ?>
<html>
<!--

#body.php
<?php ?>
-->
<body>
...

Я пытался решить проблему преобразования между форматами кодирования в notepad ++, но безрезультатно. Так что это только временное решение, пока я не найду лучшего решения проблемы.

0 голосов
/ 11 февраля 2012

Я чуть не убил свою клавиатуру, пытаясь решить проблему. Затем я попытался PSPad редактор , измените явно .inc или .php на UTF-8 и ЭТО РАБОТАЛО !!

0 голосов
/ 15 июня 2010

Dreamweaver сводит меня с ума благодаря автоматическим дополнениям спецификации. Вот исправление:

http://www.adobe.com/support/documentation/en/dreamweaver/mx2004/dwusing_errata/dwusing_errata2.html

...