PHP включает функцию, выводящую неизвестный символ

StackOverflow https://stackoverflow.com/questions/41647

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Знак порядка байтов в Википедии

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

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

Другие советы

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

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

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

enter image description here

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

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

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

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

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

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

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

Я использую Firefox 3.0.1 и Windows XP.Какой браузер / ОПЕРАЦИОННАЯ система у вас установлена?Возможно, в этом-то и может быть проблема.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top