Странное повреждение вывода PHP - PullRequest
4 голосов
/ 31 января 2010

У меня очень странное повреждение вывода на одном из моих сайтов PHP. Иногда отображается фрагмент кода HTML, а не интерпретируемые теги. Похоже, некоторые персонажи отсутствуют, портят теги. См. Пример ниже: вторая строка должна быть просто ссылкой на c1 , но по какой-то причине отображается часть целевого URL.

альтернативный текст http://trappist.elis.ugent.be/~wheirman/atuin/tmp/phpstrangeness.png

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

Кто-нибудь когда-либо видел что-то подобное ??

EDIT

Когда я «Просмотреть исходный код» в Safari на этой странице, я получаю следующий HTML-код:

<tr class="odd">
  <td>73</td>
  <td><a href="companies.php?view=1&amp;companyid=73&amp;return=%2Foffice%2Fcompanies.php">c1</a></td>
  <td></td>
  <td><img src='/images/dot_blue.png'  class="altTooltip" alt="inactive: no account"  /> </td>

Я не вижу в этом ничего плохого, поэтому либо Safari перезагрузил страницу, когда я спросил его об источнике, либо я не смотрю достаточно усердно ...

Ответы [ 3 ]

2 голосов
/ 31 января 2010

Ну, вот мой выстрел в темноте.

Перерыв происходит в слове «офис», после комбинации символов fi. Могу поспорить, что лигатура fi каким-то образом вызывает проблемы

Как именно? Поскольку этот HTML-код не содержит лигатуры, это может быть ошибкой в ​​Safari. Тем более, что это происходит случайно. Не могли бы вы попытаться переименовать этот файл и посмотреть, исчезнет ли проблема?

Наличие правильного HTML также может помочь избежать этой проблемы, поскольку это облегчает анализ.

1 голос
/ 04 февраля 2010

Я наконец нашел проблему (с помощью Web Inspector): TinyMCE вставлял теги (которые он использует для загрузки языковых файлов и модулей расширения), в случайных, казалось бы, местах внутри моего собственного HTML.Результатом было то, что в случае, видимом из моего скриншота, что-то вроде <a href="foo<script src="tinymce/lang/en.js">bar.php">foobar</a>.

Поскольку я также использую jQuery на той же странице, я предполагаю, что это в конечном итоге было вызвано модификациями jQuery в DOMи добавления TinyMCE происходили одновременно, что приводило к некоторому состоянию гонки (вызванному ошибкой, которая, по-видимому, проявляется только в Safari).

Сейчас я использую сборку jQuery TinyMCE, и всебыло хорошо с тех пор ...

Спасибо всем за помощь!

1 голос
/ 03 февраля 2010

Когда вы выбираете кусок HTML и просматриваете исходный код, вы получаете не 100%, что там. Например, все вы &amp;, что, вероятно, означает, что вы выбрали оскорбительный текст и просмотрели источник выделения.

Если у вас все еще есть проблема, попробуйте просмотреть весь исходный код, не выбирая ничего, а затем, используя ctrl + f, найти место в коде, и попытаться дать нам более крупный пример, а не только строку, вызывающую проблемы но правильный ряд, и в более широком контексте.

Например, при использовании таблиц ошибочное значение <td> может иметь очень странные последствия, это не похоже на проблему такого типа, я просто говорю, что нам нужен контекст, чтобы иметь возможность помочь.

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

<?= $someVar ?>

и убедитесь, что это не так:

<a href=<?= isset($x) ?'"'. $someVar.'"': '"'.$someOlderVar.'">'?>> xxx </a>

Итак, нет выбора, и образец большего размера, пожалуйста. И нам нужно что-то из кода, который выводит HTML с ошибкой ...

...