Обрезаем текст определённой длины на PHP


Обрезаем текст определённой длины на PHP

(PHP 3, PHP 4, PHP 5)

substr — Возвращает подстроку

Описание string substr ( string string, int start [, int length] )

substr() возвращает подстроку строки string длиной length , начинающегося с start символа по счету.

Если start неотрицателен, возвращаемая подстрока начинается в позиции start от начала строки, считая от нуля. Например, в строке ‘ abcdef ‘, в позиции 0 находится символ ‘ a ‘, в позиции 2 — символ ‘ c ‘, и т.д.

Пример 1. Пример использования substr()

= substr ( «abcdef» , 1 ); // возвращает «bcdef»
$rest = substr ( «abcdef» , 1 , 3 ); // возвращает «bcd»
$rest = substr ( «abcdef» , 0 , 4 ); // возвращает «abcd»
$rest = substr ( «abcdef» , 0 , 8 ); // возвращает «abcdef»

// к отдельным символам можно обращаться с помощью фигурных скобок
$string = ‘abcdef’ ;
echo $string < 0 >; // выводит a
echo $string < 3 >; // выводит d
?>

Если start отрицательный, возвращаемая подстрока начинается с start символа с конца строки string .

Пример 2. Использование отрицательного start

= substr ( «abcdef» , — 1 ); // возвращает «f»
$rest = substr ( «abcdef» , — 2 ); // возвращает «ef»
$rest = substr ( «abcdef» , — 3 , 1 ); // возвращает «d»
?>

Если length положительный, возвращаемая строка будет не длиннее length символов. Если длина строки string меньше или равна start символов, возвращается FALSE .

Если length отрицательный, то будет отброшено указанное этим аргументом число символов с конца строки string . Если при этом позиция начала подстроки, определяемая аргументом start , находится в отброшенной части строки, возвращается пустая строка.

Пример 3. Использование отрицательного length

Как обрезать строку по словам на PHP

Часто встречается необходимость обрезать строку, но не просто сделать это с помощью функции substr(), а так, чтобы сохранить слова целыми. Перед вами функция на PHP, которая позволяет разбивать строку по словам.

А вот версия для работы с многобайтовыми кодировками:

Здравствуй дорогой читатель! Я рад приветствовать тебя на страницах моего блога. Уже несколько лет я занимаюсь веб-программированием и рад поделиться с тобой своими знаниями и советами. Если тебе понравились мои статьи, ты можешь подписаться на рассылку блога, из неё ты узнаешь много интересного!

У тебя будут проблемы с юникод строками — utf-8 это уже стандарт.

Для проверки можешь задать строку «Привет мир!». Визуально кажется, что символов 11, но фактически ее длина 22. Поэтому если написать cutStr(‘Привет мир!’, 11), то получится неожиданный результат =)

Тут надо работать с функциями из расширения mbstring
http://php.net/manual/ru/ref.mbstring.php

Точно! Я эту функцию писал давно, про mb_* знаю и активно использую)
Сейчас поправлю, благодарю за указание на ошибку!

Мое невежество, но давно хотел озадачиться вопросом многобайтовых кодировок.
На скорую руку у меня вот так вышло:

Комментарии написали почти одновременно =)
Мне кажется в твоём варианте mb_detect_encoding() лишнее, проще указать ‘UTF-8’ в аргументе $encoding по-умолчанию.

А если у нас не utf-8? Либо мы изначально не знаем точно какая кодировка придет?

На самом деле я до конца не уверен в том, что функция mb_detect_encoding() корректно работает, хоть она и встроенная. Слишком много материала в гугле на тему «как определить кодировку строки» и там народ порой такие алгоритмы пишет, что глаза на лоб лезут от непонимания =)

Ну и потестируй еще мою, я до конца в ней не уверен =)

«На самом деле я до конца не уверен в том, что функция mb_detect_encoding() корректно работает, хоть она и встроенная.» — вот и я тоже не уверен. Лучше определить кодировку отдельно и передать её аргументом, а большинство случаев покрывает UTF-8 ��

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

Здравствуйте, уважаемые читатели блога LifeExample,в этой статье мы коротко рассмотрим, как в php обрезать строку. Задача обрезания строк в php возникает, как правило, тогда когда необходимая информация слишком длинная и не помещается в предназначенный для нее размер блока на сайте. Такой информацией, например, может являться анонс новости, который необходимо уместить в трех строках и обрезав текст, добавить к концу строки многоточие.

В php обрезать строку можно самыми разными способами, я хочу привести несколько самых распространенных вариантов, и выделись наиболее оптимальный.

Вариант 1 (самый тривиальный способ обрезать строку)

Казалось бы, отличный способ, краткий и удобный, но за лаконичностью этого примера скрывается несколько проблем:

  • строка обрезается ровно на 240 символе не взирая на кодировку, другими словами некоторые символы закодированные более чем одним байтом будут разрезаны некорректно и в результате по лучится неизвестный символ, который в свою очередь заменится прекрасным знаком вопроса в контенте сайта.
  • второй минус в том, что часть слова, на которую пришелся 240 символ, может оказаться совершенно не читаемой, или даже изменить смысл предложения.

Вариант 2 (обрезаем строку php до символа пробела)

Такой вариант учитывает попадание начала обрезания строки на середину слова и на выходе возвращает хорошо грамотно обрезанный текст без обрывков слов.
В минусах по-прежнему проблема с кодировкой.

Вариант 3 (правильно обрезаем строку php)

Данный вариант является самым наилучшим и практичным в применении способом в php обрезать строку до символа. Функцией mb_substr мы не просто обрезаем строку php до пробела, но и учитываем кодировку этой строки. Такой подход позволяет избежать проблемы с появлением знаков вопроса после обрезки текста.

Надеюсь данный урок будет полезен начинающим программистам, поскольку именно они чаще всего сталкиваются с такими актуальными задачами как «обрезать строку с конца php» или «php обрезать строку до символа»

Спасибо за внимание, подписывайтесь на обновление блога, в скором времени выйдут интересные статьи.

Обрезаем строку PHP: простые способы

Адаптивная верстка сайта предполагает адекватное изменение его страниц в зависимости от устройства, которое использует посетитель. Если в отношении блочных и строчных элементов почти все поддается «автоматизации» средствами CSS и JavaScript, то при формировании контента и использовании баз данных без серверной стороны трудно обойтись.

Обычно обрезаем строку на PHP, когда элемент HTML верстки имеет ограничение на количество символов, которые видимы, но это частная задача.

Традиционное решение

Одна из самых популярных и часто используемых функций — substr(). В нее передается два или три параметра:

  • исходная строка;
  • позиция начала ($iPos);
  • длина вырезаемой подстроки ($iLen).

Последний параметр можно не указывать. Если указано только два параметра: результатом substr() будет подстрока, от позиции начала ($iPos) до конца исходной строки. Если было передано три параметра, то обрезаем строку PHP от позиции начала ($iPos) до указанной длины ($iLen).

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

Специальная функция

Задачу «обрезаем строку» PHP рассматривает (в широком смысле) в контексте: с обеих сторон. Исторически — это функция trim(), которая имеет целью удалить незначащие символы:

  • пробелы;
  • переводы строк;
  • возврат каретки;
  • табуляцию;
  • нулевые символы

с обоих концов строки. Это очень востребованная функция, особенно при работе с базами данных, выборка из которых часто содержит много пробелов. При использовании функции explode() также часто получаются лишние символы с начала и конца строки.

Однако далеко не все разработчики используют функцию trim() в полную силу. Для задачи «обрезаем строку» PHP предлагает использовать второй параметр функции, где можно указать любой набор символов, которые следует ликвидировать из исходной строки.

Существенно, что символы удаляются только с начала и с конца исходной строки. Важно, что манипулируя масками удаляемых символов и последовательностью подзадач.

  • Сначала обрезаем строку на PHP по одной маске.
  • Потом по другой.
  • Потом по третьей.

В результате последовательности вариантов применения одной функции обрезаем текст на PHP так, как это требуется для решения поставленной задачи.

Нестандартные способы

Если не рассматривать весь спектр строчных функций языка, то пара функций explode()/implode() и функция str_replace() позволяют решать нестандартные задачи «резки» строчной информации.

Результат запроса MySQL всегда формален в структуре выдаваемой информации, а содержание полей (элементов) результата всегда определяется источником, то есть разработчиком, который проектировал базу данных.

Это частный пример, но точно отвечающий на вопрос: как в PHP обрезать строку, когда строк много. Функция trm() — частность, а ее история определена задачами, когда информации было не так много, а в потребности отрезать что-то кроме незначащих символов не было необходимости.

Сегодня информация циркулирует большими объемами и резать построчно не только нет необходимости, но и нерационально.

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

Динамика и объем информации, которую необходимо обработать — это прежде всего адекватное решение, а не применение одной специальной функции.

Обрезаем текст определённой длины на PHP

В данной статье мы рассмотрим функции PHP, с помощью которых можно обрезать строку с текстом в нужном месте.

Обрезка строки с текстом может пригодиться в разных случаях. Например, обрезать название видеоролика, если оно слишком длинное или для создания небольшого описания статьи и т.п.

Рассмотрим функцию substr, с помощью которой мы будем обрезать текст.

substr – возвращает подстроку.

Она имеет следующий формат написания: substr(string, start, length), где string – строка с текстом, start – позиция, с которой нужно начать отсчет (числовое значение, обычно бывает 0), length – нужно количество символов (числовое значение).


Пример #1 (простая обрезка):

Объяснение кода:

$simple – строка с текстом, который нужно обрезать (string);
– символ, с которого нужно начать отсчет, т.е. с самого первого;
7 – количество символов (вместе с пробелами), которое нужно показать, начиная с нулевого (0).

В результате выполнения мы получим «I think» – ровно семь символов, включая пробел.

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

Пример #2 (обрезка строки с конца):

В результате выполнения данного кода мы получим «expl». То есть, мы показываем пять символов с конца строки, начиная с восьмого.

Также после обрезки мы можем добавить нужный нам текст, например многоточие. Это делается очень просто.

Пример #3 (добавление текста после обрезки):

В результате выполнение данного кода мы получим «I think I can…».

Если вы захотите обрезать строку, которая содержит текст на русском языке, с помощью substr, то у вас появятся непонятные символы (естественные проблемы с русским текстом). Для того, чтобы исправить данную проблему, нужно использовать mb_substr.

mb_substr – получает часть строки.

Она имеет следующий формат написания: mb_substr(string, start, length, string encoding). Все то же самое, что и в substr. Единственное отличие – это дополнительный параметр, в котором указывается кодировка.

Для примера используем ту же фразу, но только на русском языке.

Пример #4 (обрезка строки на русском языке):

Как видно из примера, мы указали кодировку UTF-8, и в результате выполнения данного кода получим «Я могу всё об…». Остальные параметры полностью схожи с substr.

Обрезание предложения по заданому количеству символов

07.03.2014, 15:53

Отсортировать предложения по количеству символов в них
В файле записан текст. Вывести предложения этого текста в порядке возрастания.

Обрезание строки без лишних символов
И снова вынужден обратиться за помощью. Есть такая задача, обрезать строку до определённой длины.

Определить сложность каждого предложения и всего текста по количеству слов и количеству знаков препинания
ТЗ: Определить сложность каждого предложения и всего текста по количеству слов и количеству знаков.

Обрезание лишних символов
Всем привет! На сайте есть форма, в которой имеется поле «цена». В базе MySql этому полю.

Обрезание нулевых символов у строки
Интересуюсь, как быстрее и проще отбросить нулевые символы в конце строки, полученной из массива.

Обрезка текста по предложениям [дубликат]

На данный вопрос уже ответили:

Данный код не корректно разбивает текст на предложения

Если в предложении имеется несколько точек, например S.T.A.L.K.E.R то конечно выведется текст не корректно. Можно ли это как-то исправить?

Отмечен как дубликат участниками Oceinic, Streletz, Alex, Suvitruf says Reinstate Monica ♦ , cyadvert 21 ноя ’15 в 22:22 .

Подобный вопрос задавали ранее и на него уже получен ответ. Если представленные ответы не являются исчерпывающими, пожалуйста, задайте новый вопрос.

2 ответа 2

Есть очень сильное подозрение, что при любом уровне «продвинутости» вашей системы останется необходимость вычитки результатов.

Сначала вы разберетесь со случаями типа S.T.A.L.K.E.R., потом столкнетесь с парцеллированными предложениями. решите учитывать регистр букв — споткнетесь о тексты, в которых первые слова в предложениях написаны с маленькой буквы (типа этого предложения).

Есть еще и такие случаи исхода предложения: !, . . ?, . . . . . . . . . . — это только то, что предполагается пунктуацией русского языка. Но много ли текстов вы видели, написанных по правилам? Кстати, как вы будете делить первое предложение в этом абзаце?

Если возможно автоматизировать черновую работу по делению текста на части, а потом вычитать его — сделайте так.

Текст обрезки до 340 символов

Я вынимаю сообщения в блоге из БД. Я хочу обрезать текст до максимальной длины 340 символов.

Если сообщение в блоге превышает 340 символов, я хочу обрезать текст до последнего полного слова и добавить «. » в конец.

Другие ответы показывают, как вы можете сделать текст примерно 340 символами. Если это вам подходит, воспользуйтесь одним из других ответов.

Но если вам нужен очень строгий максимум из 340 символов, другие ответы не будут работать. Вы должны помнить, что добавление ‘. ‘ может увеличить длину строки, и вам нужно учесть это.

Обратите внимание, что здесь я использую перегрузку strrpos , которая принимает смещение, чтобы начать поиск непосредственно из правильного местоположения в строке, а не сначала сокращать строку.

Посмотрите, как он работает в Интернете: ideone

Похоже, вы хотели бы сначала обрезать текст до 340 символов, а затем найти местоположение последнего » в строке и обрезать до этой суммы. Вот так:

Если у вас включено расширение mbstring (которое сейчас находится на большинстве серверов), вы можете использовать функцию mb_strimwidth.

Я поставил ответ Джона Конде в методе:

вы можете попробовать использовать функции, которые поставляются с PHP, например wordwrap

function trim_characters ($ text, $length = 340) <

Используйте эту функцию trim_characters(), чтобы обрезать строку слов с заданным количеством символов, изящно останавливаясь в белых местах. Я думаю, это полезно для вас.

Почему так?

  • Мне нравится решение регулярных выражений по подстроке, чтобы поймать любые слова, кроме пробелов в слове (интерполяция и т.д.).
  • Решение John Condoe не совсем корректно, так как оно обрезает текст до 340 символов , а затем завершает последнее слово (так часто будет дольше, чем нужно)

Реальное регулярное решение очень просто:

Полный метод в PHP может выглядеть следующим образом:

  • $shownLength должен соблюдать очень строгий предел (как упоминал Марк Байерс)
  • Исключение выбрано в случае, если заданная длина слишком мала.
  • \w\b часть состоит в том, чтобы избежать пробела или интерполяции в конце (см. ниже)
  • Если первое слово будет длиннее желаемой максимальной длины, это слово будет жестоко вырезано
  • Несмотря на то, что в вопросе результат In the . описывается как желаемый, я чувствую, что In the. более плавный (также не нравится In the. и т.д.).

Как обрезать кириллическую строку с помощью PHP

Дата размещения статьи: 01.06.2014

Создание сайта в Ульяновске с серьезным функционалом и взаимодействием с базами данных очень часто требует, чтобы определенная строка не превышала определенного заданного объема. Это может понадобиться, например, для ограничения количества символов, передающихся серверу баз данных с помощью поля input, для отображения на странице сайта только части строки (например, при формировании равных по высоте анонсов новостей в списке) и для многих других задач.

Первое, на что натыкаются начинающие программисты – PHP функция substr. Она действительно используется для обрезки строк и синтаксис ее несложен substr(string, int start [, int length] ), где int start – начальный символ с которого нужно начать резать строку, а необязательный параметр int length – количество символов, которые нужно отрезать. Однако, для неопытного программиста она может показаться странной, если он пытается использовать ее для PHP обрезки строки с кириллицей. В результате работы substr с кириллической строкой на конце обрезанной строки может появиться знак вопроса, или знак вопроса в ромбике, а общее число вырезанных символов почему-то в два раза меньше того, что было задано в параметре int length. Почему же так происходит?

Дело в том русскоязычные символы в UTF-8 имеют размер в 2 байта, а латинские символы всего 1 байт. PHP функция substr режет строку именно по байтам, а не по символам. Если строка состоит из латинских символов, то ничего странного не происходит, так как число символов совпадает с числом байтов. А при работе с кириллицей, где каждый символ занимает 2 байта, параметр int length запросто может попасть на «середину» символа, и в результате на конце вырезанной строки при выводе мы увидим тот злополучный знак вопроса в ромбике.

Как правильно вырезать часть строки с кириллицей?

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

Синтаксис функции несложный:

iconv_substr ( string, int start [, int length [, charset]] )

Пример для обрезки русскоязычной строки до 80 символов с UTF-8 кодировкой с помощью iconv_substr:

$new_string = iconv_substr ($string, 0 , 80 , “UTF-8” );

Цифра ноль в примере означает что отсчет 80 символов начинается с самого начала строки.

Разработка и дизайн © 2004 — 2020, Вебстудия Ульяновск Все права защищены
Использование материалов сайта без письменного разрешения компании запрещено. Информация, размещенная на данном сайте ни при каких обстоятельствах не является офертой, предусмотренной ГК РФ.

Обрезка текста PHP

Возможно Вам где-нибудь пригодиться обрезать текст в качестве краткого описания. Допустим, чтобы не создавать два поле description — краткое описание, обычно это бывает вступление, чтобы заинтересовать публику прочитать полный текст и text — полный текст материала.

Предлагаю более экономичный вариант. Создать только поле text и обрезать его в начале, например на 400 символов, этого будет вполне достаточно, чтобы понять о чем идет речь в данном материале.

Давайте подробнее рассмотрим на каком-либо запросе к таблице, возьмем к примеру таблицу materials — материалы и обрежем поле text на 400 символов начиная с 1-го.

Как видно мы использовали функцию substr, которая возвращает подстроку определенной длины от начала переменной $a до $b.

Илон Маск рекомендует:  Что такое код cpdf_end_text
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL