Главная > PHP > php: strlen и utf-8

php: strlen и utf-8

В примере мы проверяем длину поискового запроса. :)

$searchitem = $_POST['search'];

Первый вариант:

$lenght = strlen($searchitem);
echo $lenght;

С одной стороны все правильно, но если кодировка у нас UTF-8, то $n1 будет равно в 2 раза больше чем нам нужно, когда поисковый запрос на русском.
Правильный вариант:

$lenght = mb_strlen($searchitem, 'UTF-8');
echo $lenght;

По теме: http://www.e-mind.ru/news/view/?id=53
Как пример:

if (mb_strlen($searchitem, 'UTF-8') >= 4)
{
   Функция_выполняющая_поиск_в_БД();
}
else
{
   echo "Ошибка! :( Поисковый запрос не может быть менее 4 символов";
}
Categories: PHP Tags:
  1. Аноним
    26 мая,2014 в 10:27 | #1

    @Cat
    Допускаются оба варианта записи слова. «Понт» не засчитан.

  2. ads
    21 марта,2014 в 04:16 | #2

    @Евгений Ли
    Это наоборот самый быстрый вариант для utf-8.

  3. Cat
    13 сентября,2013 в 20:01 | #3

    Английское слово «длина» записывается как length, не lenght.

  4. Евгений Ли
    10 января,2013 в 11:24 | #4

    некоторые ещё предлагают вариант:
    $length = strlen(utf8_decode($s));
    но это наверное более медленный вариант, чем предложенный автором

  5. htaccess
    5 ноября,2012 в 20:52 | #5

    @Жвын
    Потому, что UTF-8 это многобайтовая кодировка и русский(и некоторые другие) символ кодируется бо’льшим количеством байтом, чем например латинские.

  6. Жвын
    11 января,2012 в 21:33 | #6

    Спасибо! Приходилось писать корявые функции делящие на два + подсчет пробелов.
    А почему русский символ считается за два?

Похожие публикации