Кодировка в php

Есть сайт-блог. Решил поменять язык на русский, написал код, на локалке все работает. Когда залил на хостинг, возникли проблемы с кодировкой, а именно: вместо русских символов появляются вопросительные знаки. После пары часов поиска вставил функцию mysqli_set_charset, но теперь новая проблема, а точнее задача. Нужно обрезать текст, если он, допустим, длиннее 100 символов. Написал код:

    if (strlen($row['a']) > 103) {
        $a = '';
        $j = 0;
        for(;$j<100;$j++) {
            $sym = $row['a'][$j];
            $a = $a . $sym;
        }
        $a = $a . '...';
        } else {
        $a = $row['a'];
    }

где $row - массив со строкой из базы данных. Так вот, на выходе получилась строка, куда короче, чем 100 символов. Попробовал сделать echo $a[0];. Вывело спец. символ из юникода типа '�'. Проверил еще некоторые индексы - тоже выходит этот знак. Помогите решить проблему: либо сделать, чтобы эти знаки вообще не появлялись, либо убрать их.


Ответы (1 шт):

Автор решения: Сергей В.
  • Все файлы php должны быть в кодировке utf-8 без BOM.

  • При подключении к БД выставлять соединение на utf-8, вот пример для PDO: $this->conn->exec("set names utf8");

  • древний вариант: mysql_query("SET NAMES 'UTF8'");

  • Обрезать вот так mb_substr().

  • Вывод на фронт с указанием <meta charset="UTF-8">

  • Все должно получиться.

→ Ссылка