Unicode в PHP?

Я слышал, что у PHP очень низкая поддержка Unicode. Итак, что нужно, чтобы сделать приложение с поддержкой PHP 5 Unicode поддерживаемым в PHP 5.3+? Будет ли mbstring единственным вариантом здесь? Как Facebook или Yahoo получили это ограничение PHP?

PHP не поддерживает низкоуровневую поддержку любой кодировки . Но все это на самом деле означает, что он не заботится о языковом уровне . Строки в PHP – это сырые байтовые последовательности, которые могут быть в любой кодировке, которая вам нравится. При обработке многобайтовых строк вам нужно позаботиться о том, чтобы использовать правильную функцию манипуляции строками, а не напрямую ввинчивать поток байтов. Таким образом, единственная «не-поддержка» Unicode заключается в том, что она не включает концепцию кодирования в основной язык, но вы все равно можете отлично работать с любой кодировкой, манипулируя строками, используя соответствующую строковую функцию.

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

Подробное освещение этой темы см. В разделе « Каждый программист», «Положительно нужно знать о кодировках и наборах символов для работы с текстом» .

PHP имеет плохую поддержку Unicode, но это невозможно сделать, вам просто нужно быть осторожным с функциями, которые вы используете, и их поддержкой для unicode. На этой странице есть хорошее резюме поддержки Unicode для различных функций и расширений http://www.phpwact.org/php/i18n/utf-8

Если данные поступают из таблиц, использующих UTF-8, вы должны просто установить правильные заголовки и мета, и вы должны быть в порядке (нет необходимости кодировать что-либо):

<?php header ('Content-type: text/html; charset=utf-8'); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> </body> </html> 

Следующие переменные mbstring должны быть установлены через php.ini или vhost-configuration (httpd.conf; не работает в каталоге [через .htaccess]):

 mbstring.language = Neutral mbstring.internal_encoding = UTF-8 mbstring.func_overload = 7 

Просто оставите код таким, какой он есть, убедитесь, что ваш редактор / IDE сохраняет файлы только как UTF-8 и доставляет все как UTF-8 (через HTTP-заголовок или META-тег).

См. Также: Руководство по PHP – многобайтовая строка – функция перегрузки функций