Обрезать строку php

Размещая описание на сайте или длинные заголовки страницы, мы сталкиваем с проблемой — контент не помещается на странице или выходит за рамки допустимого количества символов. Для этих целей в PHP существуют функции с помощью которых строку можно обрезать до определенного количества символов. Рассмотрим некоторые из них

Функция substr

функция substr применима при обрезании строки в кодировке windows-1251

Синтаксис функции substr

string <b>substr</b> ( string string, int start [, int length]

где

  • string — исходный текст который необходимо обрезать;
  • start — начальная позиция с которой строка будет обрезана;
  • length — количество символов которое надо оставить;

Пример использования функции substr

	$n = 5;
	$string = 'hello world!';
	echo substr($string, 0, $n); //hello

Недостатки функции substr

  1. При использовании этой функции со строкой содержащей русские символы которая записана в кодировке UTF-8 возможно появление не читаемых символов так как русский символ в кодировке utf-8 имеет 2 байта, а в windows-1251 один байт.
  2. При такой обрезке текст будет обрезаться неравномерно что будет приводить к тому что слово может обрезаться по середине

Функция mb_substr

Основное отличие этой функции от subsrtr() в том что функция сама определяет верную кодировку и обрезает текст без не читаемых символов

Синтаксис функции mb_substr

string mb_substr (string string, int start [, int length [, string encoding]

где

  • string — исходный текст который необходимо обрезать;
  • start — начальная позиция с которой строка будет обрезана;
  • length — количество символов которое надо оставить.
  • encoding — кодировка текста, если кодировка определяется неверное.

Пример использования функции mb_substr

$text = "Пример задачи"адачи";
$second = mb_substr($text,7,// Обрезаем 6 символов начиная с 7-го
мволов // выведет 'задачи'

Недостатки функции mb_substr

  1. При такой обрезке текст будет обрезаться неравномерно что будет приводить к тому что слово может обрезаться по середине

Функция для обрезания строки PHP без недостатков

Учитывая все факторы и принимая во внимания все недостатки предыдущих функция, я написал свою функция для обрезания строки

function substr_norm($str, $length, $znak = false)
{
if (strlen($str) &gt; $length)
{
$symb[]['symbol'] = '!';
$symb[]['symbol'] = '.';
$symb[]['symbol'] = '?';
 
$str_new = substr($str, 0, $length);
 
foreach ($symb as $key =&gt; $val)
{
$pos = strripos($str_new, $val['symbol']);
if ($pos !== false)
{
if ($znak === false)
{
$znak = $pos;
}
else if ($znak &lt; $pos)
{
$znak = $pos;
}
}
}
 
if ($znak !== false)
{
if ($length-50 &lt; $znak)
{
$length = $znak+1;
$str_new = substr($str, 0, $length);
}
else
{
$pos = strripos($str_new, ' ');
$length = $pos;
$str_new = substr($str, 0, $length).'...';
}
}
else
{
$pos = strripos($str_new, ' ');
$length = $pos;
$str_new = substr($str, 0, $length).'...';
}
 
}
else
{
$str_new = $str;
}
return $str_new;
}

Где

  • str — исходный текст который необходимо обрезать;
  • length — количество символов которое надо оставить.
  • znak — если true то обрезать по предложениям

Описание работы функции для обрезания строки php

Для начала мы делаем проверку что бы текст был длиннее длины строки которую мы должны получить

if (strlen($str) &gt; $length)

Если будем обрезать целыми предложениями то ищем ближайший знак окончания предложения

foreach ($symb as $key =&gt; $val)
{
$pos = strripos($str_new, $val['symbol']);
if ($pos !== false)
{
if ($znak === false)
{
$znak = $pos;
}
else if ($znak &lt; $pos)
{
$znak = $pos;
}
}
}

Если находим такой знак то обрезаем его, если нет то обрезаем текст по ближайший пробел расположенный недалеко от планируемого обрезания строки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *