Необходимость ограничения количества символов при выводе какой-либо информации в php возникает при создании различных новостных модулей или просто для ограничения длинного текста. Лично я часто использую эту возможность совместно с кнопкой Подробнее для сокращения длины сайта.
Для решения задачи нам понадобится функции substr() / mb_strlen().
Они работают совершенно аналогично, но в них есть один важный момент. Начнем с substr()
Синтаксис: substr($str, $first, [$length])
$str - это переменная, текст которой надо ограничить;
$first - символ, с которого мы начнем обрезать текст. Счет идет с 0.
$length - это количество символов, которое нужно вывести. Параметр необязательный. Если его не писать, то выведутся все символы после $first
Примеры для понимания работы функции
$text = "SuperVR and CLUB";
echo substr($text,0,6); // Выведет 6 символов начиная с 0-ого: 'SuperV'.
echo substr($text,-2); // Выведет 2 символа с конца строки: 'UB'
echo substr($text,8,3); // Выведет 3 символа начиная с 8-ого: 'and'
echo substr($text,8); // Выведет все символы начиная с 8-ого выведет 'and CLUB'
Таким образом, средствами php мы можем легко ограничить длину текста, например, чтобы он выводил первые 150 символов: echo substr($text,0,150);
Но у функции substr() есть серьезный недостаток - она работает только с кодировкой win 1251. Как вы заметили в примерах изначальный текст написан в латинице. Поэтому для работы с кириллицей (в частности кодировки utf-8) была придумана функция mb_substr().
Рекомендую всегда использовать mb_substr(). Она более практична, а синтаксис практически одинаковый.
Синтаксис: substr($str, $first, [$length] , [$codirovka])
Здесь все 3 аргумента такие же, как и в substr(), добавилась только переменная $codirovka – кодировка обрабатываемой строки. Если кодировка не указана – берет с внутренней кодировки документа.
Примеры:
$text = "Комната три пять";
echo mb_substr($text,0,6, 'utf-8'); // Показывает 6 символов начиная с 0-ого, выведет 'Комнат'.
echo mb_substr($text,8,3, 'utf-8'); // Показывает 3 символа начиная с 8-ого выведет 'три'
echo mb_substr($text,8); // Покажет ВСЕ символы начиная с 8-ого выведет 'три пять'
Узнать длину строки можно так:
echo mb_strlen('Строка'); //выведет 6. Работает в windows-1251
echo mb_strlen('Строка','UTF-8'); //выведет 6. Работает в utf-8
И, напоследок, когда я еще не знал о mb_substr(), то мучился с substr() и научил последнюю понимать кириллицу в UTF-8 используя следующее перобразование:
echo iconv ('windows-1251', 'utf-8', substr(iconv ('utf-8', 'windows-1251', "Первым делом необходимо"), 7)); // выводит "делом необходимо". Работает в utf-8