Получить первый символ строки UTF-8

Я получаю строку UTF-8 из db и пытаюсь повторить ее первый символ:

$title= $model- > title; echo $title [0];

Я получаю:

Что случилось? Спасибо!

Ответ 1

Есть несколько вещей, которые нужно учитывать:

  1. Убедитесь, что данные в БД хранятся как UTF-8
  2. Убедитесь, что клиентское соединение с БД находится в UTF-8 (например, в MySQL см.: http://www.php.net/manual/en/mysqli.character-set-name.php)
  3. Убедитесь, что для страницы задан тип контента UTF-8 [вы можете использовать header('Content-Type: utf-8');]
  4. Попробуйте установить внутреннюю кодировку, используя mb_internal_encoding("UTF-8");
  5. Используйте mb_substr вместо обозначения индекса массива

Ответ 2

$first_char = mb_substr($title, 0, 1);

Для правильной обработки строк Unicode вам необходимо использовать многобайтовые строковые функции PHP:

http://www.php.net/manual/en/ref.mbstring.php

http://www.php.net/manual/en/function.mb-substr.php

Вам также нужно указать кодировку символов в <head> вашего HTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

или

<meta http-equiv="Content-Type" content="text/html; charset=UTF-16" />

Ответ 3

Как уже упоминалось в других вопросах, с PHP, при попытке получить подстроку, он не понимает многобайтовых символов (например, с UTF8).

В других ответах не упоминается, что вы должны намекать на кодировку, которую вы хотели бы использовать для mb_substr

Так, например, я использую это:

 mb_substr( "Sunday", 0, 1,'UTF8'); // Returns S
 mb_substr( "воскресенье", 0, 1,'UTF8'); // Returns в

Ответ 4

Строки PHP не понимают многобайтовые строки по умолчанию, такой массив, как индексирование, будет прерывать первый байт, и если это произойдет не в диапазоне ascii, вы получите этот результат.

Используйте mb_substr.