Юникод в PHP? - PullRequest
       24

Юникод в PHP?

7 голосов
/ 20 декабря 2011

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

Ответы [ 4 ]

8 голосов
/ 20 декабря 2011

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

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

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

1 голос
/ 20 декабря 2011

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

0 голосов
/ 20 декабря 2011

Следующие переменные 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-заголовок или мета-тег).

См. также: PHP Manual - Многобайтовая строка - Функция перегрузки функции

0 голосов
/ 20 декабря 2011

Если данные поступают из таблиц, использующих 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>
...