Исходный код PHP в файлах UTF-8; как правильно интерпретировать?
Я строю инструменты для анализа исходного кода. Такие инструменты должны правильно читать файлы исходного кода, особенно в том, что касается кодировки символов. Например, "Какова точная строка байтов в строковом литерале? " (как PHP-литералы, так и HTML-текст).
Возможно, я ошибочно понимаю, что исходные файлы PHP имеют только 8-битные символы (то есть механизм PHP читает их таким образом [правильно]?, Поскольку они должны содержать только 8-битные символы). Но восемь битных символов вкакая кодировка? (Я предполагаю, что предназначен для соответствия ISO-8859-1 (-x?) [Может кто-нибудь процитировать главу и стих?]. То есть, умлаут предназначен для умлаута, верно? После этого можно писать сценарии PHP с HTML и последовательности для большинства европейских наций / наборов символов прямо.
Но ясно, что с Юникодом это проблематично. Насколько я могу судить, большинство приложений PHP имеют дело с Unicode, по сути, имея строки, содержащие последовательности байтов UTF-8, которые могут быть вставлены в 8-битные строки PHP. После этого можно создавать сценарии, HTML-код которых содержит последовательности Unicode UTF-8, если вы сообщаете серверу, что генерируете текст UTF-8.
Для вышеупомянутых ситуаций можно прочитать файл PHP как 8-битный символьный текст, и мне кажется, что это соответствует языку.
Меня озадачивают исходные файлы PHP, закодированные как UTF-8 (в пакете Joomla содержится ~ 1800 исходных файлов, из которых около 10 - это UTF-8, а остальные - нет). Любые (не ASCII) европейские символы, которые правильно отображаются в рендеринге UTF-8, фактически кодируются как многобайтовые последовательности. Я полагаю, что на таких страницах, которые обслуживаются как UTF-8, HTML будет правильно отображаться. Но любые сравнения строк для европейских символов или других символов Юникода, которые, по-видимому, правильно отображаются в текстовом редакторе, просто выиграли ».т работа. И строковые литералы не будут содержать то, что они, кажется, содержат. Программисты используют файлы UTF-8, потому что этоЧто предлагают редакторы? Они делают это нарочно? Или это просто несчастный случай, который нене имеет значения для большинства работ?
Итак, как следует читать исходный файл PHP? (в частности, в какой кодировке символов?) Один из возможных ответов - всегда в виде 8-битных кодов ISO-8859-1, независимо от фактического содержимого или спецификаций (я вижу много PHP-файлов, помеченных спецификацией UTF-8). Другой ответ, как UTF-8, если так помечен.
[Наши инструменты читают и пишут произвольные кодировки. А "тривиальный» Инструмент для чтения файлов в одном символе, записи идентичных кодов в другой кодировке. Таким образом, чтение файлов PHP в формате UTF-8 приводит к проблемам при написании файлов, эквивалентных ISO8859-1, поскольку многие кодовые точки UTF-8 (например, символ евро) не могут быть закодированы в ISO8859-x.]
РЕДАКТИРОВАТЬ 30 августа. Теперь мы проверяем файлы PHP, чтобы узнать, имеют ли они спецификации UTF-8 или, по-видимому, имеют последовательности UTF-8, которые являются законными. В любом из этих случаев мы читаем файл как UTF-8; в противном случае мы по умолчанию читаем его как ISO8859-1. Теперь мы сохраняем кодировку файла, если изменим его. (Чтобы получить все это правильно, довольно много работы). Кажется, это безопасная стратегия, но она может отличаться от ожидаемой программистами PHP.