За последние 24 часа нас посетили 62144 программиста и 1783 робота. Сейчас ищут 789 программистов ...

Кириллица занимает 2 символа

Тема в разделе "PHP для новичков", создана пользователем tarabukinivan, 1 июл 2017.

  1. tarabukinivan

    tarabukinivan Активный пользователь

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

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Для мультибайтовых кодировок строковые функции начинаются с mb_
    Поищите..
    --- Добавлено ---
    И сейчас уже наверно лучше использовать не utf8 а utf8mb4
     
    MouseZver и denis01 нравится это.
  3. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв