PHP Включить функцию вывода неизвестного символа - PullRequest
4 голосов
/ 03 сентября 2008

При использовании функции включения php, включение успешно выполняется, но оно также выводит символ перед выводом включения, символ имеет шестнадцатеричное значение 3F, и я понятия не имею, откуда он, хотя Кажется, это происходит с каждым включением.

Сначала я подумал, что это кодировка файла, но это не проблема. Я создал тестовый пример, чтобы продемонстрировать это: ( ссылка больше не работает ) http://driveefficiently.com/testinclude.php этот файл состоит только из:

<? include("include.inc"); ?>

и include.inc состоит только из:

<? echo ("hello, world"); ?> 

и все же вывод: "? Привет, мир" где? это символ со случайным значением. Именно из-за этой ценности я не знаю происхождения, и иногда это немного портит мои сайты.

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

Ответы [ 6 ]

11 голосов
/ 03 сентября 2008

То, что вы видите, является меткой порядка байтов UTF-8:

Представление спецификации UTF-8 - это последовательность байтов EF BB BF, которая отображается в виде символов ISO-8859-1 «» »в большинстве текстовых редакторов и веб-браузеров, не подготовленных для обработки UTF-8.

Порядок следования байтов в Википедии

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

Подробнее об этой проблеме вы можете прочитать здесь

3 голосов
/ 03 сентября 2008

Ваш веб-сервер (или ваш текстовый редактор), очевидно, включает в документ спецификацию . Я не вижу в своем браузере мошенника, кроме случаев, когда я явно установил кодировку сайта на Latin-1. Затем я вижу две (!) Спецификации UTF-8.

/ РЕДАКТИРОВАТЬ: Исходя из того, что есть две спецификации, я заключаю, что спецификация фактически включена вашим редактором в начале файла. Какой редактор вы используете? Если вы используете Visual Studio, вам нужно сказать «Сохранить как…» в меню «Файл», а затем нажать кнопку «Сохранить с кодированием…». Там выберите «UTF-8 без спецификации» или что-то подобное.

1 голос
/ 03 сентября 2008

Он не отображается на отображаемой странице в Firefox или IE, но вы можете увидеть забавного персонажа при просмотре исходного кода в IE

enter image description here

Это на машине с Linux? Не могли бы вы найти и заменить на vim или sed, чтобы посмотреть, сможете ли вы избавиться от 3F таким образом?

Если это в Windows, попробуйте открыть include.inc с помощью Блокнота, чтобы увидеть, виден ли забавный символ и можно ли его удалить.

Мне также было бы интересно посмотреть, что произойдет, если вы скопируете код из списка включений и просто запустите его самостоятельно.

0 голосов
/ 03 сентября 2008

Мне также было бы интересно посмотреть, что произойдет, если вы скопируете код из включите и просто запустите его самостоятельно.

Марк: это решение для общего хостинга, поэтому я не могу получить доступ к файлу оболочки. Однако, как вы можете видеть здесь , там нет символов, которых там быть не должно, и запуск того же файла, что и скрипт, не создает этот символ. (Компания общего хостинга оказала помощь, постоянно сообщая мне, что это проблема браузера).

0 голосов
/ 03 сентября 2008

Символ 3F на самом деле - это знак вопроса, он не просто отображается как один.

Я получаю те же результаты, что и Томас, без вопросительного знака.

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

0 голосов
/ 03 сентября 2008

Я вижу hello, world на странице, на которую вы ссылаетесь. Никаких проблем, которые я вижу ...

Я использую Firefox 3.0.1 и Windows XP. Какой браузер / ОС вы используете? Возможно, это может быть проблемой.

...