Что лучше для разработчиков PHP - Unicode или UTF-8?

Что лучше для разработчиков PHP - Unicode или UTF-8?

Я собираюсь создать международный CMS. Таким образом, я собираюсь иметь клиенты во всем мире. Они будут говорить на всех возможных языках.

Какой формат кодирования лучше для распознавания браузера и для хранения данных DB?

6
задан Michael Petrotta 8 May 2010 в 01:32
поделиться

5 ответов

"Юникод" - это не кодировка. Возможно, вы имеете в виду UTF-8 или UTF-16 (big-endian или little-endian). Это не имеет большого значения для поддержки браузеров. Любой современный браузер поддерживает все три кодировки. Вероятно, вы обнаружите, что UTF-8 наиболее эффективен с точки зрения экономии места для вашей базы данных.

11
ответ дан 8 December 2019 в 05:20
поделиться

UTF-8 - это кодировка Unicode, способ представления (абстрактной) последовательности символов Unicode как (конкретной) последовательности байтов. Существуют и другие кодировки, такие как UTF-16 (который имеет варианты с прямым и обратным порядком байтов). И UTF-8, и UTF-16 могут представлять любой символ в Юникоде, поэтому вы можете поддерживать все языки независимо от того, какой из них вы выберете.

UTF-8 полезен, если большая часть вашего текста написана на западных языках, поскольку он представляет символы ASCII всего в одном байте, но для многих символов в «иностранных» алфавитах, таких как китайский, требуется по три байта.UTF-16, с другой стороны, использует ровно два байта для всех символов, с которыми вы, вероятно, когда-либо столкнетесь (хотя для некоторых очень эзотерических символов, находящихся за пределами «базовой многоязычной плоскости» Unicode, требуется четыре).

Я бы не рекомендовал использовать PHP для разработки международного программного обеспечения, потому что он на самом деле не поддерживает Unicode должным образом. Он имеет некоторые дополнительные функции для работы с кодировками Unicode (посмотрите на функции многобайтовых строк ), но ядро ​​PHP обрабатывает строки как байты, а не символы, поэтому стандартные строковые функции PHP не подходят для работа с символами, закодированными более чем в один байт. Например, если вы вызываете PHP strlen () для строки, содержащей представление UTF-8 символа «大», он вернет 3, потому что этот символ занимает три байта в UTF-8, даже хотя это всего лишь один персонаж. Использование функций разделения строк, таких как substr () , ненадежно, потому что если вы разделите посередине многобайтовый символ, вы повредите строку.

Большинство других языков, используемых для веб-разработки, таких как Java, C # и Python, имеют встроенную поддержку Unicode, поэтому вы можете помещать произвольные символы Unicode в строку и не беспокоиться о том, какая кодировка используется для представляют их в памяти, потому что с вашей точки зрения строка содержит символы, а не байты. Это гораздо более безопасный и менее подверженный ошибкам способ работы с текстом Unicode. По этой и другим причинам (PHP на самом деле не такой уж хороший язык) я бы рекомендовал использовать что-нибудь еще.

(Я читал, что PHP 6 будет иметь надлежащую поддержку Unicode, но она пока недоступна.)

6
ответ дан 8 December 2019 в 05:20
поделиться

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

0
ответ дан 8 December 2019 в 05:20
поделиться

Юникод - это стандарт, который определяет набор абстрактных символов (так называемых кодовых точек) и их свойства (это цифра, это верхний регистр и т. Д.). Он также определяет определенные кодировки (методы для представления символов байтами), UTF-8 является одним из них. См. Абсолютный минимум, который должен знать каждый разработчик программного обеспечения о Unicode и наборах символов (без оправданий!) от Spolsky для получения более подробной информации.

Я бы определенно выбрал UTF-8, в наши дни он является стандартом и имеет некоторые приятные свойства, такие как оставление всех 7-битных символов ASCII на месте, что означает, что большинство функций, связанных с HTML, таких как htmlspecialchars можно использовать непосредственно в представлении UTF-8, поэтому у вас меньше шансов оставить дыры в безопасности, связанные с кодированием. Кроме того, многие функции PHP явно ожидают строки UTF-8, а UTF-8 также имеет лучшую поддержку текстового редактора, чем альтернативы, такие как UTF-16.

3
ответ дан 8 December 2019 в 05:20
поделиться

UTF-8 - это кодировка Unicode. Вероятно, вы имели в виду, что хотите выбирать между UTF-8 и UTF-16.

Microsoft рекомендует

разработчикам использовать UTF-8 для всех данных Unicode, которые они отправляют и получают из браузера.

Для хранения базы данных используйте кодировку, которую ваша СУБД лучше поддерживает. Или, при прочих равных, выбирайте исходя из эффективности использования пространства. UTF-8 меньше для английского и большинства европейских языков, тогда как UTF-16, как правило, меньше для азиатских языков.

3
ответ дан 8 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: