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 символов"; }
@Cat
Допускаются оба варианта записи слова. «Понт» не засчитан.
@Евгений Ли
Это наоборот самый быстрый вариант для utf-8.
Английское слово «длина» записывается как length, не lenght.
некоторые ещё предлагают вариант:
$length = strlen(utf8_decode($s));
но это наверное более медленный вариант, чем предложенный автором
@Жвын
Потому, что UTF-8 это многобайтовая кодировка и русский(и некоторые другие) символ кодируется бо’льшим количеством байтом, чем например латинские.
Спасибо! Приходилось писать корявые функции делящие на два + подсчет пробелов.
А почему русский символ считается за два?