Доброе утро форумчане! Создал себе сайт. Пока стоит на денвере. База mysql. В ней 2 таблицы. Типы MYISAM. Сравнение utf8_general_ci. Имеется .htaccess: PHP: AddDefaultCharset utf8 php_flag magic_quotes_gpc Off ErrorDocument 404 /page404.html Все страницы в Dos\windows и кодировка utf без бом 1. Сама страница начинается так: PHP: <?php require_once "lib/start.php";?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Ваш сайт</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="css/font-awesome/css/font-awesome.min.css"> <link href="css/style.css" rel="stylesheet"> <!--[if lt IE 9]> <script src="js/html5shiv.min.js"></script> <script src="js/respond.min.js"></script> <![endif]--> </head> 2. В странице start PHP: <?php mb_internal_encoding("UTF-8"); session_start(); define("ADM_LOGIN", "admin"); define("ADM_PASSWORD", "05537645b4fd932a9f293ec1bd535039"); define("DB_HOST", "127.0.0.1"); define("DB_USER", "root"); define("DB_PASSWORD", ""); define("DB_NAME", "magmag"); require_once "/home/MagMag/www/lib/functions.php"; ... 3. functions.php: PHP: $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); $mysqli->set_charset("utf8"); 4. Потом через функции выборки из БД беру данные: PHP: function getOrders(){ $query = "SELECT * FROM `magorders` ORDER BY `date_order` DESC"; $result = getTable($query); if(!$result) return array(); return $result; } function getTable($query) { global $mysqli; $result_set = $mysqli->query($query); if (is_null($result_set)) return false; $result = array(); while (($row = $result_set->fetch_assoc()) != false) { $result[] = $row; } $result_set->close(); return $result; } 5. Прохожусь через цикл foreach PHP: <?php foreach($orders as $order) { И хочу сделать вывод только первые 30 символов ячейки order_text, если она содержит более 30 символов. PHP: $str=$order["order_text"]; if(strlen($str)>=30){ $str_text=substr($str,0,30); echo $str_text."..."; }else echo $str; Но за одну кириллицу она читает 2 символа. Т.е. Здесь она заходит в if, если в переменной больше 15 символов. И выводит только 15 символов, причем при выводе, если в переменной содержится символ, которая занимает 1 символ (латиница или цифры), то последний символ превращается в "?". Вобще не понимаю, как, тогда выводить один символ при проходе через цикл for с инкрементом i. Любой $simb будет превращаться в "?" Как сделать, чтобы кириллица занимала только один символ? Сначала думал это из-за mysql, но оказывается не из-за скл так, как сейчас ввел типа $str="иииииииииииииииииииищщщщщщщщщщщщщщщ"; Онаоказывается введет себя также
Для мультибайтовых кодировок строковые функции начинаются с mb_ Поищите.. --- Добавлено --- И сейчас уже наверно лучше использовать не utf8 а utf8mb4