За последние 24 часа нас посетили 17340 программистов и 1921 робот. Сейчас ищут 986 программистов ...

Как правильно определять длину и обрезать строки с учетом UTF8 для вставки в mysql

Тема в разделе "PHP для новичков", создана пользователем glorsh66, 18 май 2018.

  1. glorsh66

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

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Вопрос собственно в этом.
    Я хочу вставит в базу например имя пользователя в строку Varchar 50 символов длинной

    Но строка может быть переменной длинны -
    1) пользователь вводит символы на английском 1 байт
    2) На русском 2 байта

    и получается ситуация ситуация что может ввести -
    49 английских символов +1 русский

    и если тупо обрезать
    Код (Text):
    1. substr($strt,0,50)
    То может оказаться последний символ просто будет половинкой☻
    --- Добавлено ---
    Кстати немного офтопа! Но хочу передать слова благодарности тем типам☻ кто держит данный форум (держит в первую очередь в чистоте и юзабилити☺)
    Все очень на высоте.
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Используй таблицы utf8
    --- Добавлено ---
    Да все они там жаркие парни баблом не делятся. Даже сходки и те не за их счет:)
     
    glorsh66 нравится это.
  3. glorsh66

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

    С нами с:
    9 июл 2017
    Сообщения:
    247
    Симпатии:
    4
    Так, том и дело что таблицы UTF8.


    Вот микро тест
    Код (Text):
    1. $str1 ="English";
    2. $str2 ="Английс";
    3. $str3 ="ZФZФZФZ";
    4.  
    5. $str = $str1;
    6. echo $str. ' Длинна: '. strlen($str) . ' Обрезаный до 3 символов: '. substr($str,0,3).'<br>';
    7.  
    8. $str = $str2;
    9. echo $str. ' Длинна: '. strlen($str) . ' Обрезаный до 3 символов: '. substr($str,0,3).'<br>';
    10.  
    11. $str = $str3;
    12. echo $str. ' Длинна: '. strlen($str) . ' Обрезаный до 3 символов: '. substr($str,0,3).'<br>';
    13.  
    14.  
    15. echo 'mc функции <br><br>';
    16.  
    17. $str = $str1;
    18. echo $str. ' Длинна: '. mb_strlen($str) . ' Обрезаный до 3 символов: '. mb_substr($str,0,3).'<br>';
    19.  
    20. $str = $str2;
    21. echo $str. ' Длинна: '. mb_strlen($str) . ' Обрезаный до 3 символов: '. mb_substr($str,0,3).'<br>';
    22.  
    23. $str = $str3;
    24. echo $str. ' Длинна: '. mb_strlen($str) . ' Обрезаный до 3 символов: '. mb_substr($str,0,3).'<br>';
    Результат
    English Длинна: 7 Обрезаный до 3 символов: Eng
    Английс Длинна: 14 Обрезаный до 3 символов: А�
    ZФZФZФZ Длинна: 10 Обрезаный до 3 символов: ZФ
    mc функции

    English Длинна: 7 Обрезаный до 3 символов: Eng
    Английс Длинна: 7 Обрезаный до 3 символов: Анг
    ZФZФZФZ Длинна: 7 Обрезаный до 3 символов: ZФZ
    --- Добавлено ---
    Просто смыл в том что я если у пользователя более 50 символов, хочу их обрезать. (не возвращая к форме, что бы он их заново ввел)
    Но при этом не допускать вот таких вот призраков
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    ты об этом.. mb_strlen mb_substr