Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%
Как в php обрезать строку
Здравствуйте, уважаемые читатели блога LifeExample,в этой статье мы коротко рассмотрим, как в php обрезать строку. Задача обрезания строк в php возникает, как правило, тогда когда необходимая информация слишком длинная и не помещается в предназначенный для нее размер блока на сайте. Такой информацией, например, может являться анонс новости, который необходимо уместить в трех строках и обрезав текст, добавить к концу строки многоточие.
В php обрезать строку можно самыми разными способами, я хочу привести несколько самых распространенных вариантов, и выделись наиболее оптимальный.
Вариант 1 (самый тривиальный способ обрезать строку)
1 | $str = substr($str,0,240).’…’; |
Казалось бы, отличный способ, краткий и удобный, но за лаконичностью этого примера скрывается несколько проблем:
- строка обрезается ровно на 240 символе не взирая на кодировку, другими словами некоторые символы закодированные более чем одним байтом будут разрезаны некорректно и в результате по лучится неизвестный символ, который в свою очередь заменится прекрасным знаком вопроса в контенте сайта.
- второй минус в том, что часть слова, на которую пришелся 240 символ, может оказаться совершенно не читаемой, или даже изменить смысл предложения.
Вариант 2 (обрезаем строку php до символа пробела)
1 2 3 4 | function cropStr($str, $size){ $str = substr($str,0, $size); // первым этапом надо отрезать строку четко по заданному количеству символов return substr($str, 0, strrpos($str, ' ' )); //получаем позицию последнего пробела и обрезаем до нее строку } |
Такой вариант учитывает попадание начала обрезания строки на середину слова и на выходе возвращает хорошо грамотно обрезанный текст без обрывков слов.
В минусах по-прежнему проблема с кодировкой.
Вариант 3 (правильно обрезаем строку php)
1 2 3 | function cropStr($str, $size){ return mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,'utf-8'),' ',utf-8),'utf-8'); } |
Данный вариант является самым наилучшим и практичным в применении способом в php обрезать строку до символа. Функцией mb_substr мы не просто обрезаем строку php до пробела, но и учитываем кодировку этой строки. Такой подход позволяет избежать проблемы с появлением знаков вопроса после обрезки текста.
Надеюсь данный урок будет полезен начинающим программистам, поскольку именно они чаще всего сталкиваются с такими актуальными задачами как «обрезать строку с конца php» или «php обрезать строку до символа»
Спасибо за внимание, подписывайтесь на обновление блога, в скором времени выйдут интересные статьи.
Читайте также похожие статьи:
Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.
Комментарии
Регулярками делается все
2
3
print preg_match("/((\S+[\s-]+){3})/s", $text, $m)? rtrim($m[1]). '...' : $text;
//3 количество слов
или
2
3
$length = 12; //Максимально 12 символов
print preg_replace('/\s[^\s]+$/', '', mb_substr($string, 0, $length, 'UTF-8'));
К примеру такую функцию я быстрее напишу и запомню
2
3
4
$str = substr($str,0, $size); // первым этапом надо отрезать строку четко по заданному количеству символов
return substr($str, 0, strrpos($str, ' ' )); //получаем позицию последнего пробела и обрезаем до нее строку
}
Чем регулярным выражением
1. Вы даже не предложили вариант с обрезкой по колличеству слов
2. Писать код нынче не модно, код надо хранить в сниппетах редактора IDE который используешь.
Лень двигатель программиста
1. Частный случай. Можете предложить решение, если считаете это полезным.
2. IDE — круто, но не все пользуются.
Главный эпический косяк этих примеров в том, что они режут строку до последнего пробела, даже если сама строка короче заданной длины. Надо в функции проверку на длину делать.
function cropStr($str, $size){
if(mb_strlen($str)>$size)$return_str=mb_substr($str,0,mb_strpos($str,» «,$size,’utf-8′),’utf-8′);
else $return_str=$str;
return $return_str;
}
function cropStr($str, $size){
if(mb_strlen($str, ‘utf-8′)>$size) //ту про кодировку забыли.
$return_str=mb_substr($str,0,mb_strpos($str,’ ‘,$size,’utf-8′),’utf-8’);
else $return_str=$str;
return $return_str;
}
Иначе в некоторых случаях ошибку выдавать будет
Пример 3 с моим усовершенствованием (если слишком мало пробелов или строка короче, а также с вариантом добавления символа типа многоточия в конце обрезанной строки):
2
3
4
5
6
7
8
9
10
$string = $str;
if (mb_strlen($str) > $size)
$string = mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,'utf-8'),' ',utf-8),'utf-8');
if (mb_strlen($string) > $size)
$string = mb_substr($strS);
if (mb_strlen($str) > mb_strlen($string))
$string = $string . $symb;
return $string;
}
Пример использования:
Результат:
Длинный…
Спасибо!!!
Спасибо, работает как надо, предлагаю добавить эту функцию в статью. Не все прочитают комменты.