Как с помощью различных функций php обрезать строку?
Содержание:
Специальная функция
Задачу «обрезаем строку» PHP рассматривает (в широком смысле) в контексте: с обеих сторон. Исторически — это функция trim(), которая имеет целью удалить незначащие символы:
- пробелы;
- переводы строк;
- возврат каретки;
- табуляцию;
- нулевые символы
с обоих концов строки. Это очень востребованная функция, особенно при работе с базами данных, выборка из которых часто содержит много пробелов. При использовании функции explode() также часто получаются лишние символы с начала и конца строки.
Однако далеко не все разработчики используют функцию trim() в полную силу. Для задачи «обрезаем строку» PHP предлагает использовать второй параметр функции, где можно указать любой набор символов, которые следует ликвидировать из исходной строки.
Существенно, что символы удаляются только с начала и с конца исходной строки
Важно, что манипулируя масками удаляемых символов и последовательностью подзадач
- Сначала обрезаем строку на PHP по одной маске.
- Потом по другой.
- Потом по третьей.
В результате последовательности вариантов применения одной функции обрезаем текст на PHP так, как это требуется для решения поставленной задачи.
Традиционное решение
Одна из самых популярных и часто используемых функций — substr(). В нее передается два или три параметра:
- исходная строка;
- позиция начала ($iPos);
- длина вырезаемой подстроки ($iLen).
Последний параметр можно не указывать. Если указано только два параметра: результатом substr() будет подстрока, от позиции начала ($iPos) до конца исходной строки. Если было передано три параметра, то обрезаем строку PHP от позиции начала ($iPos) до указанной длины ($iLen).
Выбрать только начало строки посредством этой функции возможно, когда первый параметр равен нулю. Если исходная позиция отрицательна, то началом, с которого обрезаем строку, PHP будет считать символ в позиции $iPos от конца строки. Нумерация символов в строке осуществляется с нуля.
Ссылки
Многобайтные кодировки и связанные с ними вопросы очень сложны.
Невозможно рассмотреть их здесь достаточно подробно. Дополнительно просмотрите следующие ресурсы.
-
Unicode/UTF/UCS/etc
http://www.unicode.org/
-
информация о символах Japanese/Korean/Chinese
ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/cjk.inf
- mb_convert_case — Perform case folding on a string
- mb_convert_encoding — конвертирует кодировку символов
- mb_convert_kana — конвертирует «kana» из одной в другую («zen-kaku» ,»han-kaku» и другие)
- mb_convert_variables — конвертирует код символа в переменной(-ых)
- mb_decode_mimeheader — декодирует строку в поле MIME header
- mb_decode_numericentity — декодирует HTML-ссылку на числовую строку в символ
- mb_detect_encoding — определяет кодировку символов
- mb_detect_order — устанавливает/получает порядок определения кодировки символов
- mb_encode_mimeheader — кодирует строку для MIME header’а
- mb_encode_numericentity — кодирует символ в HTML-ссылку на числовую строку
- mb_ereg_match — совпадение с регулярным выражением для многобайтной строки
- 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 — получает внутренние настройки mbstring
- mb_http_input — определяет кодировку символов HTTP-ввода
- mb_http_output — устанавливает/получает кодировку символов HTTP-вывода
- mb_internal_encoding — устанавливает/получает внутреннюю кодировку кодировку символов
- mb_language — устанавливает/получает текущий язык
- mb_list_encodings — возвращает массив всех поддерживаемых кодировок
- mb_output_handler — Callback-функция конвертирует кодировку символов в буфере вывода
- mb_parse_str — разбирает GET/POST/COOKIE данные и устанавливает глобальную переменную
- mb_preferred_mime_name — получает строку MIME charset
- mb_regex_encoding — возвращает текущую кодировку для многобайтного regex как строку
- mb_regex_set_options — Устанавливает/Получает опции по умолчанию для функций mbregex
- mb_send_mail — отправляет кодированную mail
- mb_split — делит многобайтную строку с использованием регулярного выражения
- mb_strcut — получает часть строки
- mb_strimwidth — получает усечённую строку специфицированной ширины
- mb_strlen — получает длину строки
- mb_strpos — находит позицию первого вхождения строки в строке
- mb_strtolower — приводит строку к нижнему регистру
- mb_strtoupper — приводит строку к верхнему регистру
- mb_strrpos — находит позицию последнего вхождения строки в строке
- mb_strwidth — возвращает ширину строки
- mb_substitute_character — устанавливает/получает замещающий символ
- mb_substr_count — Считает число вхождений подстроки
- mb_substr — получает часть строки
mb_substr(), substr() и mb_strcut()
mb_substr(), substr() и mb_strcut() — еще несколько функций, похожих на те, которые я описал выше. Они отличаются только тем, как обрабатываются многобайтовые наборы символов (китайский язык и т.д.).
Если вы выводите PHP обрезанную часть строки до ближайшего слова на основе количества символов (но без конечного многоточия), используйте следующий код:
echo substr($string, 0, strrpos(substr( $string, 0, 35), ' ')); Изменив функцию, чтобы теперь в конце добавлялись многоточие, мы получим следующее: /* Усеченный до ближайшего слова текст, основываясь на количестве символов - substr() http://php.net/manual/en/function.substr.php */ function internoetics_string_strrpos($string, $length = 137, $trimmarker = '...') { $len = strlen(trim($string)); $newstring = ($len > $length) ? rtrim(substr($string, 0, strrpos(substr($string, 0, $length), ' '))) . $trimmarker : $string; return $newstring; } /* Использование */ echo internoetics_string_strrpos($string);
Как обрезать строку по символу
- -> разбираемся в тезисе
- -> explode
- ->показать слева
- ->показать справа
- ->показать слева
- ->показать справа
- Скачать
PHP Обрезать строку по символу можно по разному….
Обрезать строку по символу в php -> можно понять, как -> что у нас есть в строке определенный заранее известный символ, и вот по нему и нужно обрезать строку! Будем использовать explode
Обрезать строку по символу в php -> есть вообще строка… любая и нам требуется отсчитать некое количество символов и вот поэтому количеству символов и обрезать строку!
Мы уже говорили об этой функции explode — сейчас будет использовать её для обрезки строки по символу!
Нам потребуется для иллюстрации обрезки строки по символу какая-то произвольная строка с каким-то наполнением:$string = «12345678910|10987654321»;
Для примера, возьмем символ, который расположен примерно посередине -> «|», создаем такую запись :
$new_array = explode(«|» , $string);
Если нам потребуется первая часть, то используем current: echo current($new_array);
Результат:
12345678910
Если вам потребуется вторая часть, то используем end. Здесь нужно дополнение — если символ 1, то end будет показывать второй элемент, если символ в строке повторяется несколько раз, то end покажет последнюю ячейку массива
В данном случае разделительный элемент сроки я единственном числе, поэтому нам предстанет вторая часть:
echo end($new_array);
Результат:
10987654321
Прежде чем продолжать нам потребуются какие-то условия, например, нам нужно обрезать строку по 5 символу, здесь число не важно, и нам опять…
понадобится строка :
$string = «12345678910|10987654321»;
Поскольку и дальше будем использовать это число для обрезки по символу, то присвоим это значение произвольной переменной: $num_elem = 5;
Длаее нам понадобится функция substr и вот такая конструкция:
$first = substr($string , 0, $num_elem);
Далее выводим с помощью echo
echo $first;
Результат:
12345
Можете посчитать … строка обрезана по 5 символу!И показана строка с начала!
Но, что если нам требуется обрезать строку по символу с начала и удалить эту часть оставив только часть справа…
Как мы уже сказали выше, что если нам требуется обрезать строку сначала по символу и выкинуть эту часть, отставив строку с конца..
если вы не обратили внимание на строку
то рекомендую сейчас на неё внимательность посмотреть и на первый результат тоже…
Опять брем всю ту же строку…:
$string = «12345678910|10987654321»;
Пишем такую конструкцию:
echo substr($string , 5 );
Результат:
678910|10987654321
Теперь предположим
что нам требуется обрезать строку по символу с конца и показать левую часть, выкинув обрезанную часть:
echo substr($string , 0, — 5 ); ?>
Результат:
12345678910|109876
Опять обрезаем строку справа, и эту часть обрезанной строки и покажем:
Обрезать строку по символу № 5 с конца строки — показать правую часть:
echo substr($string , — 5 ); ?>
Результат:
54321
Последняя дата редактирования : 27.02.2021 14:23
Название скрипта :Обрезать строку по символу.
Скрипт № 33.13Ссылка на скачивание : Все скрипты на
//dwweb.ru/comments_1_5/include/img/hand_no_foto.png
no
no
Перегрузка/Overload строковых функций PHP mbstring-функциями с поддержкой многобайтных символов
Поскольку большинство приложений PHP написаны на языках, использующих
однобайтную кодировку символов, имеются некоторые трудности при работе с
многобайтными строками, в том числе с японскими. Большинство строковых PHP-функций,
таких как substr(), не поддерживают многобайтные строки.
Многобайтное расширение (mbstring) имеет строковые РНР-функции с
поддержкой многобайтных символов (например, substr() поддерживает
mb_substr()).
Многобайтное расширение (mbstring) также поддерживает ‘перегрузку функций’
для добавления функциональности многобайтных строк без модификации кода.
Используя перегрузку функций, некоторые строковые функции PHP будут перегружены многобайтными строковыми функциями.
Например, mb_substr() вызывается вместо
substr(), если перегрузка функций включена. Перегрузка функций облегчает перенос
приложений, поддерживая только однобайтные кодировки для многобайтных приложений.
mbstring.func_overload в php.ini должно иметь некоторое положительное значение для использования перегрузки функций.
Это значение должно специфицировать категорию перегружающей функции: 1
включает перегрузку функции mail; 2 — строковые функции, 4 — функции
регулярных выражений. Например, если установлена 7, mail, strings и regex
функции должны перегружаться. Список перегружаемых функций дан в таблице.
Таблица 1. Перегружаемые функции
значение mbstring.func_overload | функция-оригинал | перегруженная функция |
---|---|---|
1 | mail() | mb_send_mail() |
2 | strlen() | mb_strlen() |
2 | strpos() | mb_strpos() |
2 | strrpos() | mb_strrpos() |
2 | substr() | mb_substr() |
4 | ereg() | mb_ereg() |
4 | eregi() | mb_eregi() |
4 | ereg_replace() | mb_ereg_replace() |
4 | eregi_replace() | mb_eregi_replace() |
4 | split() | mb_split() |
Установки php.ini
Приводим значения по умолчанию, устанавливаемые в php.ini
Директива | Значение по умолчанию |
---|---|
mbstring.language |
«neutral» |
mbstring.detect_order | NULL |
mbstring.http_input |
«pass» |
mbstring.http_output |
«pass» |
mbstring.internal_encoding | NULL |
mbstring.script_encoding | NULL |
mbstring.substitute_character | NULL |
mbstring.func_overload |
«0» |
mbstring.encoding_translation |
«0» |
-
mbstring.internal_encoding определяет внутреннюю кодировку символов по умолчанию
-
mbstring.http_input определяет кодировку символов по умолчанию HTTP-ввода
-
mbstring.http_output определяет кодировку символов по умолчанию HTTP-вывода
-
mbstring.detect_order определяет порядок определения кодировки символов по умолчанию. См. также
mb_detect_order() -
mbstring.substitute_character определяет символы для замещения неправильных кодировок символов
Web-браузерам предлагается использовать ту же кодировку при отправку форм.
Однако браузеры могут не использовать ту же кодировку символов. См. mb_http_input() для определения кодировки браузера.
Если enctype имеет установленное значение multipart/form-data в HTML-формах,
mbstring не конвертирует кодировку символов в POST-данных. Пользователь обязан сделать
это в скрипте, если конвертация нужна.
Одновременно браузеры достаточно наворочены, чтобы определять кодировку символов в HTML. charset лучше установить в HTTP-шапке/header. Измените
default_charset в соответствии с кодировкой символов.
Пример 4. Установки php.ini
|
Пример 5. Установки php.ini для пользователей
|
Пример 6. Установки php.ini для пользователей SJIS
|
str-split()
Функция str-split() может быть использована в приведенной выше функции для преобразования строки в массив. str-split () не разбивает строку до целого слова. С ее помощью PHP обрезает последний символ в строке ровно до 120 знаков.
/* str-split() http://php.net/manual/en/function.str-split.php */ function internoetics_truncate_split($string, $length, $trimmarker = '...') { $lines = str_split($string, $length - strlen($trimmarker)); $line = rtrim($lines); $result = ($lines != '') ? $line . $trimmarker : $line; return $result; } /* Использование */ echo internoetics_truncate_split($string, 120);
preg_match()
Вы редко найдете тех, кто предпочитает использовать регулярные выражения, когда есть так много отличных функций PHP. Тем не менее, вот функция, которая обрезает строку до определенного символа в PHP, исходя из заданного количества знаков от начала. В отличие от других функций, описанных выше, эта функция обрезает строку до целого слова.
/* preg-match() http://php.net/manual/en/function.preg-match.php */ function internoetics_preg_string($string, $length, $trimmarker = '...') { $strlen = strlen($string); /* mb_substr добавляет принудительный разрыв в $length, если заданное количество символов не содержит окончания слова (пробела) */ $string = trim(mb_substr($string, 0, $strlen)); if ($strlen > $length) { preg_match('/^.{1,' . ($length - strlen($trimmarker)) . '}b/su', $string, $match); $string = trim($match) . $trimmarker; } else { $string = trim($string); } return $string; } /* Применение */ echo internoetics_preg_string($string, 100, $trimmarker = '...');
Описание функции
Функция принимает три параметра: $string, $length и $trimmarker (многоточие или другие символы, которые добавляются в конце строки).
Строка 7
$strlen = strlen($string);
Первое, что мы делаем, это проверяем длину PHP обрезанной строки после символа. Если строка короче, чем $length, то мы возвращаем эту строку.
Строка 9
$string = trim(mb_substr($string, 0, $strlen));
Функция mb_substr() прерывает строку в $length, если это количество символов не содержит окончания слова (пробела). Если мы передали строку длиною 500 символов и эта строка не содержит пробелов, то будет возвращена вся строка (так как функция preg_match не нашла окончания слова). На данный момент мы обрезаем строку таким образом, и возвращаем ее полностью.
Строки 10, 11, и 12
Если длина нашей строки превышает максимальную длину, определенную в качестве параметра функции, мы выполняем регулярное выражение функции preg_match(), чтобы вернуть часть строки до символа с номером $length, который определяется как конец слова (‘/^.{1,$length}b/s’). Знак периода означает любой символ, кроме символа новой строки (n). Фигурная скобка определяет диапазон, который задает, сколько символов должен PHP обрезать в строке. Таким образом {1,$length} означает от 1 до символа $length. Наконец, b означает, что шаблон будет соответствовать окончанию слова. Мы можем производить поиск только слов целиком по шаблону, который мы предоставили. И в конце s задает поиск всех пробелов.
Так как мы не хотим, чтобы возвращаемая строка превышала длину $length, максимальное количество символов в функции preg_match должно быть равно максимальной длине минус длина $trimmarke.r. Мы должны учитывать это.
Затем мы возвращаем либо усеченную строку, либо исходную строку, если она меньше заданной длины усечения.
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Заключение
Мы могли бы написать еще сотни примеров PHP обрезки строк, но когда-то нужно остановиться. Функции, приведенные в этой статье, являются частью ядра PHP, и вы можете использовать их для усечения строк. Хотя чаще всего программисты стараются избегать регулярных выражений, если другого выхода нет, вы можете прибегнуть и к их помощи.
В ряде примеров мы вернули $trimmarker, представляющий собой многоточие. При необходимости вы можете вернуть HTML-объект Ellipsis, для этого используется код …. Но лично я предпочитаю многоточие.
Скачать примеры
Скачать примеры из этой статьи вы можете здесь.
Данная публикация является переводом статьи «Truncate (Shorten) Strings to the Nearest Whole Word or Character Count with Trailing Dots using PHP Functions» , подготовленная редакцией проекта.