Intereting Posts
Как я могу использовать PHP в качестве исходного для ионной структуры? Как получить данные базовой модели POST в DB через Slim php и Paris Как сделать разбиение на страницы из массива? как установить данные массива для текстового поля в php Переменные сеанса устанавливаются только после обновления страницы. Почему array_diff () дает Array ошибку строковой конверсии? jQuery DataTables: Uncaught TypeError: невозможно прочитать свойство «mData» неопределенного Заменить ключи массива значением из другого массива как получить ранжирование позиции определенной строки, используя только mysql-запрос? проблема сорта с десятичными числами как запустить команды imagemagik в PHP? cURL ничего не возвращает? Создание объектов JS в PHP с запятыми между ними Опубликовать фотографию на стене facebook Как игнорировать вопросительный знак в качестве заполнителя при использовании PDO с PostgreSQL

Вопросы PHP UTF-8 – Если я создаю строку в PHP … это в UTF-8?

В PHP, если я создам такую ​​строку:

 $ str = "bla bla вот моя строка";

Смогу ли я использовать функции mbstring для работы с этой строкой как UTF8?

 // Будет ли это работать?
 $ str = mb_strlen ($ str); 

Кроме того, если у меня есть другая строка, которую я знаю, это UTF-8 (скажем, это значение POSTED или строка UTF-8 из базы данных), могу ли я затем объединить эти два и не иметь никаких проблем?

 // Как насчет этого, будет ли это работать? 
 $ str = $ str.  $ Utf8_string_from_database;

Первый вопрос: это зависит от того, что именно идет в строке.

В PHP (вплоть до PHP5, во всяком случае) строки – это просто последовательности байтов. С ними не связано подразумеваемый или явный набор символов; это то, о чем программист должен отслеживать. Итак, если вы помещаете только допустимые байты UTF-8 между кавычками (довольно легко, если сам файл кодируется как UTF-8), тогда строка будет UTF-8, и вы можете безопасно использовать mb_strlen () на ней.

Кроме того, если вы используете функции mbstring, вам нужно явно указать, какой символ задает ваша строка, либо с помощью mbstring.internal_encoding, либо как последний аргумент любой функции mbstring.

Второй вопрос: да, с оговорками.

Две строки, которые являются независимо действительными UTF-8, могут быть безопасно объединены по байтам (например, с оператором PHP) и по-прежнему быть действительными UTF-8. Тем не менее, вы никогда не можете быть уверены, не выполняя какую-либо работу самостоятельно, что строка POSTed действительна UTF-8. Строки базы данных немного проще, если вы тщательно установите набор символов соединения, поскольку большинство СУБД сделают для вас любое преобразование.

Если ваш исходный код находится в UTF-8, то строка находится в UTF-8, если нет – это не так. Так как строка вашего примера используется только на английском языке, это действительно UTF-8.

PHP сам не знает о кодировках. Если вы передаете материал функции mb *, он обрабатывает его как строку UTF-8.

Конкатенация должна работать нормально, несмотря ни на что, если я правильно понимаю UTF-8 🙂 Просто убедитесь, что обе строки – UTF-8, иначе вы получите странную строку в результате.

Убедитесь, что ваша директива default_charset установлена ​​в UTF-8 до того, как произойдет какое-либо из этих действий.

Либо измените php.ini напрямую, либо выполните его во время выполнения с помощью

 <?php ini_set( 'default_charset', 'UTF-8' );