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 символов";
}

Комментарии 6

Написать комментарий
  1. Аноним

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

  2. Cat

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

  3. Евгений Ли

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

  4. htaccess

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

  5. Жвын

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

Оставить комментарий

или Ctrl+Enter

Комментарии к записи по RSS