Я получаю строку UTF-8 из db и пытаюсь повторить ее первый символ:
$title= $model- > title; echo $title [0];
Я получаю:
Что случилось? Спасибо!
Я получаю строку UTF-8 из db и пытаюсь повторить ее первый символ:
$title= $model- > title; echo $title [0];
Я получаю:
Что случилось? Спасибо!
Есть несколько вещей, которые нужно учитывать:
header('Content-Type: utf-8');
]mb_internal_encoding("UTF-8");
mb_substr
вместо обозначения индекса массива$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" />
Как уже упоминалось в других вопросах, с PHP, при попытке получить подстроку, он не понимает многобайтовых символов (например, с UTF8).
В других ответах не упоминается, что вы должны намекать на кодировку, которую вы хотели бы использовать для mb_substr
Так, например, я использую это:
mb_substr( "Sunday", 0, 1,'UTF8'); // Returns S
mb_substr( "воскресенье", 0, 1,'UTF8'); // Returns в
Строки PHP не понимают многобайтовые строки по умолчанию, такой массив, как индексирование, будет прерывать первый байт, и если это произойдет не в диапазоне ascii, вы получите этот результат.
Используйте mb_substr.