Php обрезать строку троеточие

Как извлечь часть текста в php

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

Предыдущий способ хорошо подойдёт, когда мы знаем, что наш текст разместится в одну строку.

Сегодня посмотрим, как можно извлечь часть текста силами PHP.

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

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

В нашем распоряжении есть функции:

Давайте для начала создадим самую простую разметку. Сделаем контейнер, зададим ему стили. Объявим в php переменную, которая будет содержать текст и поместим эту переменную в наш контейнер. Всё очень просто. Всё это я делаю в созданном файла с расширением .php.

Для примера я помещаю всё в 1 файл. На практике лучше хранить стили в подключаемом файле таблицы стилей. Ну и ваш текст вы скорее всего будете получать из базы данных.

Результат этого кода будет таким:

Как видим, наша строка не помещается в контейнер. Сейчас будем обрезать ее с помощью разных функций и смотреть эффект.

Обрезаем с помощью substr

Возвращает обрезанную подстроку.

Изменим наш php код на следующий и посмотрим эффект:

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

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

Обрезаем строку с помощью mb_substr

Проделаем тоже самое, но теперь будем использовать mb_substr.

Эта функция принимает те же параметры плюс еще один – кодировку.

Обрезаем строку с помощью mb_strcut

mb_strcut в отличает от mb_substr оперирует не символами, а байтами. Однако при этом, если конец вырезаемой строки попадет между байтами, то она вырежет строку с первого байта, а значит багов быть не должно.

Принимает также как и mb_substr 4 параметра:

Последние 2 параметра являются необязательными.

Можно заметить, что строка получилась короче, чем при использовании mb_substr.

Это именно потому, что mb_substr оперирует символами, а mb_strcut байтами. А кириллические символы кодируются в 2 байта. Об этом также стоит помнить, выбирая функцию для обрезки, чтобы не получить строку в 2 раза короче, чем планировали.

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

Источник

mb_strimwidth

Обрезает строку ( string ) string до длины width символов, где символы половинной ширины считаются как 1 , а символы полной ширины считаются как 2 . Смотрите » http://www.unicode.org/reports/tr11/ для получения подробной информации о ширине символов Восточной Азии.

Список параметров

Смещение от начала строки. Количество символов от начала строки (первый символ стоит в позиции 0). Если указано отрицательное число, то отсчёт будет идти с конца строки.

Размер вырезаемой части в символах. Отрицательные значения отсчитываются с конца.

Строка, которая заместит конец обрезанной строки.

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

Возвращаемые значения

Обрезанная строка. Если задан четвёртый аргумент trim_marker , то его значением замещаются последние символы строки, так чтобы суммарный размер был не более width .

Список изменений

Версия Описание
8.0.0 Теперь параметр encoding может принимать значение null .
7.1.0 Добавлена поддержка отрицательных start и width .

Примеры

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

Смотрите также

User Contributed Notes 1 note

I see a lot of usage in the field where people rely on this function to truncate a string to a given length and append some chars at the end following example #1 in the above documentation.

While this works just fine with Western alphabets, it should be noted that a string’s width is NOT necessarily the same as its length.

In Chinese, Japanese and Korean, some characters can be represented as full or half width, which may lead to unexpected results.

$str = [ ‘English’ => ‘Switzerland’ ,
‘Half width’ => ‘スイス’ ,
‘Full width’ => ‘スイス’ ,
];
foreach ( $str as $w => $s ) printf ( «%-10s: %s (bytes=%d chars=%d width=%d)\nSubstring : %s\nTrim width: %s\n\n» ,
$w , $s ,
strlen ( $s ), mb_strlen ( $s ), mb_strwidth ( $s ),
mb_substr ( $s , 0 , 3 ),
mb_strimwidth ( $s , 0 , 3 )
);
>
/* Output
# With ASCII, chars == width, so everything works as expected
English : Switzerland (bytes=11 chars=11 width=11)
Substring : Swi
Trim width: Swi

# With half-width katakanas, it works too
Half width: スイス (bytes=9 chars=3 width=3)
Substring : スイス
Trim width: スイス

# Full-width katakanas are twice as wide, so we only get the 1st ‘su’ !
Full width: スイス (bytes=9 chars=3 width=6)
Substring : スイス
Trim width: ス
*/
>?

  • Функции для работы с многобайтовыми строками
    • mb_​check_​encoding
    • mb_​chr
    • mb_​convert_​case
    • mb_​convert_​encoding
    • mb_​convert_​kana
    • mb_​convert_​variables
    • mb_​decode_​mimeheader
    • mb_​decode_​numericentity
    • mb_​detect_​encoding
    • mb_​detect_​order
    • mb_​encode_​mimeheader
    • mb_​encode_​numericentity
    • mb_​encoding_​aliases
    • mb_​ereg_​match
    • mb_​ereg_​replace_​callback
    • mb_​ereg_​replace
    • mb_​ereg_​search_​getpos
    • mb_​ereg_​search_​getregs
    • mb_​ereg_​search_​init
    • mb_​ereg_​search_​pos
    • mb_​ereg_​search_​regs
    • mb_​ereg_​search_​setpos
    • mb_​ereg_​search
    • mb_​ereg
    • mb_​eregi_​replace
    • mb_​eregi
    • mb_​get_​info
    • mb_​http_​input
    • mb_​http_​output
    • mb_​internal_​encoding
    • mb_​language
    • mb_​list_​encodings
    • mb_​ord
    • mb_​output_​handler
    • mb_​parse_​str
    • mb_​preferred_​mime_​name
    • mb_​regex_​encoding
    • mb_​regex_​set_​options
    • mb_​scrub
    • mb_​send_​mail
    • mb_​split
    • mb_​str_​split
    • mb_​strcut
    • mb_​strimwidth
    • mb_​stripos
    • mb_​stristr
    • mb_​strlen
    • mb_​strpos
    • mb_​strrchr
    • mb_​strrichr
    • mb_​strripos
    • mb_​strrpos
    • mb_​strstr
    • mb_​strtolower
    • mb_​strtoupper
    • mb_​strwidth
    • mb_​substitute_​character
    • mb_​substr_​count
    • mb_​substr

    Источник

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

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

    Различного рода CMS предоставляют нам готовые решения для подобного рода задач, но почему бы не посмотреть на то, как сделать это самому.

    Данную задачу можно решить средствами JavaScript и CSS, однако мы воспользуемся языком PHP.

    Первым делом, уберём все html элементы:

    Теперь обрежем его на определённое количество символов:

    $string = substr($string, 0, 200);

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

    Напоследок находим последний пробел, устраняем его и ставим троеточие:

    $string = substr($string, 0, strrpos($string, ' ')); echo $string."… ";
    Richard III (2 October 1452 – 22 August 1485) was King of England for two years, from 1483 until his death in 1485 in the Battle of Bosworth Field. He was the last king of the House of York and the…

    Данный урок подготовлен для вас командой сайта ruseller.com
    Источник урока: http://demosthenes.info/blog/703/Build-Better-Text-Extracts-With-PHP
    Перевел: Станислав Протасевич
    Урок создан: 19 Июня 2013
    Просмотров: 107624
    Правила перепечатки

    5 последних уроков рубрики «PHP»

    Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

    Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

    Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

    Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

    Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

    Источник

    PHP – обрезаем текст по количеству символов

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

    Как в PHP обрезать текст до определенного символа?

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

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

    Первым делом, уберём все html элементы:

    Теперь обрежем его на определённое количество символов:

    $string = substr($string, 0, 200);

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

    Напоследок находим последний пробел, устраняем его и ставим троеточие:

    $string = substr($string, 0, strrpos($string, ' ')); $string = $string.'. ';

    Выводим при помощи стандартного php echo, результат будет такой:

    Richard III (2 October 1452 – 22 August 1485) was King of England for two years, from 1483 until his death in 1485 in the Battle of Bosworth Field. He was the last king of the House of York and the…

    А теперь весь код целиком:

    $string = "

    Richard III (2 October 1452 – 22August 1485) was King of England for two years, from 1483 until his death in 1485 in the Battle of Bosworth Field. He was the last king of the House of York and the last of the Plantagenet dynasty. His defeat at Bosworth Field, the decisive battle of the Wars of the Roses, is sometimes regarded as the end of the Middle Ages in England. He is the subject of the playRichard III by William Shakespeare." $string = strip_tags($string); $string = substr($string, 0, 200); $string = rtrim($string, ". -"); $string = substr($string, 0, strrpos($string, ' ')); $string = $string.'. ';

    Повторим – мы использовали strip_tags, substr, rtrim и strrpos для достижения такого результата. И, что самое главное, данный скрипт можно улучшать и менять под свои задачи.

    В своё время он помогал мне выводить “описание анонса” для товаров, формируя его из детального текста 🙂

    Источник

    Читайте также:  Php check post var
Оцените статью