[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему ломает кодировку
zelenuy
$str = "Вася";
$a = mb_strlen($str, 'utf-8');
echo $str."<br>";//убеждаемся что кодировка утф-8
echo $a."<br>";//убеждаемся что число символов тоже правельное
for($i = 0; $i < $a; $i++)
echo $str{$i}." : ";// получаем знаки вопроса
/* Почему кодировку ломает? */


user posted image
inpost
zelenuy
Так по символам обращаться нельзя, там идёт обращение к байту, а UTF-8 многобайтная кодировка, русская буква состоит из двух байт, к примеру.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
zelenuy
inpost
То есть, по символам в строке я не смогу пробежаться, обидно досадно unsure.gif
inpost
zelenuy
Никогда не вдавался в потребность, но первое, что приходит на ум - регулярка по 1 символу разбить строку.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
zelenuy
$str = "Вася";
$str = iconv("utf-8", "cp1251", $str);
$a = strlen($str);
//echo $str."<br>";//убеждаемся что кодировка утф-8
echo $a."<br>";//убеждаемся что число символов тоже правельное
for($i = 0; $i < $a; $i++)
echo iconv("cp1251", "utf-8", $str{$i})." : ";// получаем знаки вопроса
/* Почему кодировку ломает? */

О та :D тока накладно
zelenuy
inpost
Да можно попробовать
inpost
zelenuy
Твой вариант тоже неплох.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
zelenuy
$str = "Вася";
preg_match_all('/(.{1})/iu', $str, $reg);
$c = count($reg[1]);
for($i=0; $i<$c; $i++){
echo $reg[1][$i].'<br>';
}


Не твой лучше, представь я бы еще сравнивал мне бы пришлось все перегонять из одной кодировки в другую а потом обратно)
Игорь_Vasinsky
preg_split()

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
zelenuy
Игорь_Vasinsky
Можно и так тоже rolleyes.gif
Valick
zelenuy, не можно, а нужно
<?php
function
mb_str_split( $string ) {
# Split at all position not after the start: ^
# and not before the end: $

return preg_split('/(?<!^)(?!$)/u', $string );
}

$string = '火车票';
$charlist = mb_str_split( $string );

print_r( $charlist );
?>



_____________
Стимулятор ~yoomoney - 41001303250491
killer8080
mb_internal_encoding("UTF-8");
$str = "Вася";
$len = mb_strlen($str);
for ($i = 0; $i < $len; $i++)
echo mb_substr($str, $i, 1) . '<br />';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.