Есть ли недостаток, чтобы сохранить все мои файлы исходного кода в UTF-8? - PullRequest
1 голос
/ 05 апреля 2011

Если это уместно (это вполне может быть), это файлы исходного кода PHP.

Ответы [ 4 ]

7 голосов
/ 05 апреля 2011

Есть несколько ловушек, о которых нужно позаботиться:

  1. PHP не знает о символе спецификации, который некоторые редакторы или IDE любят помещать в самом начале файлов UTF-8. Этот символ указывает, что файл имеет формат UTF-8, но это не обязательно, и он невидим. Это может вызывать предупреждения «заголовки уже отправлены» от функций, которые имеют дело с заголовками HTTP, потому что PHP выведет BOM в браузер, если он его увидит, и это предотвратит отправку любого заголовка. Убедитесь, что ваш текстовый редактор имеет кодировку UTF-8 (без спецификации) ; если вы не уверены, просто сделайте тест. Если <?php header('Content-Type: text/html') ?> в начале пустого файла не выдает предупреждение, все в порядке.
  2. Строковые функции по умолчанию не учитывают многобайтовые кодировки. Это означает, что strlen действительно возвращает количество байтов в строке, а не фактическое количество символов. Это не слишком большая проблема, пока вы не начнете объединять строки не-ASCII-символов с функциями, такими как substr: когда вы это делаете, передаваемые ему индексы ссылаются на байтовые индексы, а не на символьные индексы, и это может вызвать ваш скрипт разбить не-ASCII символы на две части. Например, echo substr("é", 0, 1) вернет недопустимый символ UTF-8, потому что в UTF-8 é фактически занимает два байта, а substr вернет только первый. (Решение состоит в том, чтобы использовать mb_ строковые функции , которые знают о многобайтовых кодировках.)
  3. Вы должны убедиться, что ваши источники данных (например, внешние текстовые файлы или базы данных) также возвращают строки UTF-8, потому что PHP не выполняет автоматическое преобразование. Для этого вы можете использовать специфичные для реализации средства (например, MySQL имеет специальный запрос, который позволяет вам указать, в какой кодировке вы ожидаете результат: SET CHARACTER SET UTF8 или что-то в этом духе), или если вы не смогли найти лучший способ, mb_convert_encoding или iconv преобразует одну строку в другую кодировку.
1 голос
/ 05 апреля 2011

Обычно рекомендуется хранить все источники в UTF8. Размер обычного кода с латинскими символами вообще не имеет значения, но предотвратит сбои с любыми специальными символами.

0 голосов
/ 05 апреля 2011

Очень актуально, синтаксический анализатор PHP может начать выводить ложные символы, как, например, забавный вопросительный знак.Просто придерживайтесь нормы, очень предпочтительной.

0 голосов
/ 05 апреля 2011

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

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

С технической точки зрения разницы нет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...