Что лучше для разработчиков PHP - Unicode или UTF-8?
Я собираюсь создать международный CMS. Таким образом, я собираюсь иметь клиенты во всем мире. Они будут говорить на всех возможных языках.
Какой формат кодирования лучше для распознавания браузера и для хранения данных DB?
"Юникод" - это не кодировка. Возможно, вы имеете в виду UTF-8 или UTF-16 (big-endian или little-endian). Это не имеет большого значения для поддержки браузеров. Любой современный браузер поддерживает все три кодировки. Вероятно, вы обнаружите, что UTF-8 наиболее эффективен с точки зрения экономии места для вашей базы данных.
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, но она пока недоступна.)
Лучше использовать UTF-8, потому что он относится ко всем языковым акцентам по всему миру. Также UTF-8 имеет расширенные возможности для добавления дополнительных неиспользуемых или распознаваемых символов. Я предпочитаю и всегда использую UTF-8 и его серии.
Юникод - это стандарт, который определяет набор абстрактных символов (так называемых кодовых точек) и их свойства (это цифра, это верхний регистр и т. Д.). Он также определяет определенные кодировки (методы для представления символов байтами), UTF-8 является одним из них. См. Абсолютный минимум, который должен знать каждый разработчик программного обеспечения о Unicode и наборах символов (без оправданий!) от Spolsky для получения более подробной информации.
Я бы определенно выбрал UTF-8, в наши дни он является стандартом и имеет некоторые приятные свойства, такие как оставление всех 7-битных символов ASCII на месте, что означает, что большинство функций, связанных с HTML, таких как htmlspecialchars
можно использовать непосредственно в представлении UTF-8, поэтому у вас меньше шансов оставить дыры в безопасности, связанные с кодированием. Кроме того, многие функции PHP явно ожидают строки UTF-8, а UTF-8 также имеет лучшую поддержку текстового редактора, чем альтернативы, такие как UTF-16.
UTF-8 - это кодировка Unicode. Вероятно, вы имели в виду, что хотите выбирать между UTF-8 и UTF-16.
разработчикам использовать UTF-8 для всех данных Unicode, которые они отправляют и получают из браузера.
Для хранения базы данных используйте кодировку, которую ваша СУБД лучше поддерживает. Или, при прочих равных, выбирайте исходя из эффективности использования пространства. UTF-8 меньше для английского и большинства европейских языков, тогда как UTF-16, как правило, меньше для азиатских языков.