За последние 24 часа нас посетили 17040 программистов и 1652 робота. Сейчас ищут 963 программиста ...

Строки и кодировка

Тема в разделе "PHP для новичков", создана пользователем VLK, 23 авг 2014.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Смотрите есть такой код:
    Код (PHP):
    1. $str = 'hello';
    2.  
    3. for($i = 0; $i < strlen($str); $i++) 
    4. { 
    5.     echo( "<div>$str[$i]</div>" );  
    6. } 
    Все работает корректно, но если изменить строку на русские буквы, за место букв будут выводиться квадраты, короче не то что надо.

    Я знаю что это из-за кодировки.

    Вопрос такой, можно при таком обращении $str[$i] как-нибудь заставить выводить кириллицу нормально? по мимо "написать свой РНР", "самому допилить РНР" ну и т.п.

    Конечная задача, мне надо каждый символ в строке сравнить с нужным мне символом, типа такого:
    Код (PHP):
    1. $str = '........';
    2.  
    3. for($i = 0; $i < strlen($str); $i++) { 
    4.  if ( $str[$i] == 'ж' ) { // что то сделать
    5. }
    6. }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    В кодировке utf-8 на каждый символ может быть разное число байтов, поэтому индексация не работает. Единственный вариант:
    Код (Text):
    1.  
    2. mb_substr($str, $i, 1);
    В однобайтовых ваш код будет работать
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    и на том спасибо :)
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вы мне, кстати, подали идею написать (или найти) класс-обёртку над многобайтовыми строковыми функциями, чтоб реализовывал интерфейс с индексами. Может и удобно будет

    Добавлено спустя 26 минут 52 секунды:
    Нашёл такой. Может вам и пригодится. https://code.google.com/p/php-string/