Как посчитать длину строки php
Функция strlen в php
Покажет количество байт в два раза больше, чем элементов!
Синтаксис функции strlen
Для понимания работы функции strlen нам понадобится несколько примеров:
Функция strlen и число в php
Для иллюстрации работы функции и получения результатов, нам потребуется функция var_dump в том числе, но давайте все по порядку.
Нам нужно число, над которым мы будем проводить наши изыскания!
Пусть это будет «123456»
Оборачиваем это число в функцию strlen:
Результат вывода длины числа через strlen:
Далее(для общего развития), чтобы узнать возвращаемые данные и тип переменной обернем эту конструкцию в var_dump и выведем с помощью echo
Вывод число(int) и strlen, что с числом, изначально имеющий тип int вернет тип «int» и значение «6», количество байт равно количеству символов.
Функция strlen и число(тип string) в php
Передадим в функцию strlen число тип string
Следующий эксперимент, передадим в функцию число с типом «string», если мы помести число в кавычки, то это уже будет строка, а не число, например давайте получим результат var_dump(‘123456’); :
Теперь эту строку поместим в strlen. Мы выяснили, что данное число имеет тип string, пропустим данные через strlen echo strlen(‘123456’) :
Узнаем тип возвращенных данных echo var_dump(strlen(‘123456’)); :
Вывод число(string) и strlen, что с числом, изначально имеющий тип string вернет тип «int» и значение «6», количество байт равно количеству символов.
Strlen и строка(тип string) utf-8 в php
Мы узнали, что эта строка, следующим действием пропустим эту строку через strlen:
echo strlen(‘Привет’) :
Логично было предположить, что функция вернет значение такое же как и var_dump. Теперь проверим тип возвращенных данных.
var_dump( strlen (‘Привет’) );
Вывод строка(string) и strlen, что со строкой, изначально имеющий тип string вернет тип «int» и значение «12», количество байт НЕ равно количеству символов.
кириллица + utf-8 и strlen
Это можно сделать так:
echo strlen(iconv(«UTF-8», «windows-1251», «Привет»));
mb_strlen
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_strlen — Получает длину строки
Описание
Получает длину строки ( string ).
Список параметров
Строка ( string ), для которой измеряется длина.
Возвращаемые значения
Ошибки
Список изменений
Смотрите также
User Contributed Notes 7 notes
Speed of mb_strlen varies a lot according to specified character set.
Just did a little benchmarking (1.000.000 times with lorem ipsum text) on the mbs functions
especially mb_strtolower and mb_strtoupper are really slow (up to 100 times slower compared to normal functions). Other functions are alike-ish, but sometimes up to 5 times slower.
just be cautious when using mb_ functions in high frequented scripts.
If you find yourself without the mb string functions and can’t easily change it, a quick hack replacement for mb_strlen for utf8 characters is to use a a PCRE regex with utf8 turned on.
This is basically an ugly hack which counts all single character matches, and I’d expect it to be painfully slow on large strings.
It may not be clear whether PHP actually supports utf-8, which is the current de facto standard character encoding for Web documents, which supports most human languages. The good news is: it does.
I wrote a test program which successfully reads in a utf-8 file (without BOM) and manipulates the characters using mb_substr, mb_strlen, and mb_strpos (mb_substr should normally be avoided, as it must always start its search at character position 0).
The results with a variety of Unicode test characters in utf-8 encoding, up to four bytes in length, were mostly correct, except that accent marks were always mistakenly treated as separate characters instead of being combined with the previous character; this problem can be worked around by programming, when necessary.
Thank you Peter Albertsson for presenting that!
After spending more than eight hours tracking down two specific bugs in my mbstring-func_overloaded environment I have learned a very important lesson:
Many developers rely on strlen to give the amount of bytes in a string. While mb-overloading has very many advantages, the most hard-spotted pitfall must be this issue.
Two examples (from the two bugs found earlier):
1. Writing a string to a file:
2. Iterating through a string’s characters:
So, try to avoid these situations to support overloaded environments, and remeber Peter Albertssons remark if you find problems under such an environment.
I have been working with some funny html characters lately and due to the nightmare in manipulating them between mysql and php, I got the database column set to utf8, then store characters with html enity «ọ» as ọ in the database and set the encoding on php as «utf8».
This is where mb_strlen became more useful than strlen. While strlen(‘ọ’) gives result as 3, mb_strlen(‘ọ’,’UTF-8′) gives 1 as expected.
But left(column1,1) in mysql still gives wrong char for a multibyte string. In the example above, I had to do left(column1,3) to get the correct string from mysql. I am now about to investigate multibyte manipulation in mysql.
Строки
Управляющие последовательности
Если строка заключена в двойные кавычки («), PHP распознает большее количество управляющих последовательностей для специальных символов:
Последовательность | Значение |
---|---|
\n | новая строка (LF или 0x0A (10) в ASCII) |
\r | возврат каретки (CR или 0x0D (13) в ASCII) |
\t | горизонтальная табуляция (HT или 0x09 (9) в ASCII) |
\v | вертикальная табуляция (VT или 0x0B (11) в ASCII) (с версии PHP 5.2.5) |
\e | escape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.4) |
\f | подача страницы (FF или 0x0C (12) в ASCII) (с версии PHP 5.2.5) |
\\ | обратная косая черта |
\$ | знак доллара |
\» | двойная кавычка |
\6 | последовательность символов, соответствующая регулярному выражению символа в восьмеричной системе счисления |
\x[0-9A-Fa-f] | последовательность символов, соответствующая регулярному выражению символа в шестнадцатеричной системе счисления |
Манипулирование строками
Для работы со строками в PHP существует целый ряд специализированных функций.
Форматирование строк
В PHP есть две функции, позволяющие отформатировать данные перед выводом:
Этим функциям передаются строка управления форматом и сами форматируемые данные. Строка управления форматом включает в себя обычные символы, которые прямо копируются в результат, и определители преобразования. Каждый определитель преобразования начинается с символа процента (%) и включает следующие элементы:
Пример 1
Анализ строк
PHP содержит множество функций, дающих информацию о строках. Наиболее употребимыми являются:
Управление строками
PHP содержит множество функций управления строками. Наиболее употребимыми являются:
Функции работы со строками в PHP
Особенности операторов сравнения применительно к строкам.
Функция chop( ) возвращает строку после удаления из нее завершающих пропусков и символов новой строки. Синтаксис функции chop( ):
string chop(string строка)
В следующем примере функция chop( ) удаляет лишние символы новой строки:
str_pad()
Функция str_pad( ) выравнивает строку до определенной длины заданными символами и возвращает отформатированную строку. Синтаксис функции str_pad( ):
string str_pad (string строка, int длина_дополнения [, string дополнение [, int тип_дополнения]])
Если необязательный параметр дополнение не указан, строка дополняется пробелами. В противном случае строка дополняется заданными символами. По умолчанию строка дополняется справа; тем не менее, вы можете передать в параметре тип_дополнения константу STR_PAD_RIGHT, STR_PAD_LEFT или STR_PAD_BOTH, что приведет к дополнению строки в заданном направлении. Пример демонстрирует дополнение строки функцией str_pad( ) с параметрами по умолчанию:
В следующем примере используются необязательные параметры функции str_pad( ):
Функция trim( ) удаляет псе пропуски с обоих краев строки и возвращает полученную строку. Синтаксис функции trim( ):
string trim (string страна]
К числу удаляемых пропусков относятся и специальные символы \n, \r, \t, \v и \0.
ltrim()
Функция lrim( ) удаляет все пропуски и специальные символы с левого края строки и возвращает полученную строку. Синтаксис функции ltrim( ):
string ltrim (string строка)
Функция удаляет те же специальные символы, что и функция trim( ).
strlen()
int strlen (string строка)
Следующий пример демонстрирует определение длины строки функцией strlen( ):
Сравнение двух строк
Сравнение двух строк принадлежит к числу важнейших строковых операций любого языка. Хотя эту задачу можно решить несколькими разными способами, в РНР существуют четыре функции сравнения строк:
strcmp()
Функция strcmp( ) сравнивает две строки с учетом регистра символов. Синтаксис функции strcmp( ): int strcmp (string строка1, string строка2)
После завершения сравнения strcmp( ) возвращает одно из трех возможных значений:
В следующем фрагменте сравниваются две одинаковые строки:
strcasecmp()
int strcasecmp (string cтpoкa1, string строка2)
В следующем фрагменте сравниваются две одинаковые строки:
strspn()
Функция strspn( ) возвращает длину первого сегмента строки1, содержащего символы, присутствующие в строке2. Синтаксис функции strspn( ):
int strspn (string строка1, string строка2)
Следующий фрагмент показывает, как функция strspn( ) используется для проверки пароля:
strcspn()
Функция strcspn( ) возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2. Синтаксис функции strcspn( ):
int strcspn (string строка1, string строка2)
В следующем фрагменте функция strcspn( ) используется для проверки пароля:
Обработка строковых данных без применения регулярных выражений
При обработке больших объемов информации функции регулярных выражений сильно замедляют выполнение программы. Эти функции следует применять лишь при обработке относительно сложных строк, в которых регулярные выражения действительно необходимы. Если же анализ текста выполняется по относительно простым правилам, можно воспользоваться стандартными функциями РНР, которые заметно ускоряют обработку. Все эти функции описаны ниже.
strtok()
Функция strtok( ) разбивает строку на лексемы по разделителям, заданным вторым параметром. Синтаксис функции strtok( ):
string strtok (string строка, string разделители)
parse_str()
Функция parse_str( ) выделяет в строке пары и присваивает значения переменных в текущей области видимости. Синтаксис функции parse_str( ):
void parse_str (string строка)
Функция parse_str( ) особенно удобна при обработке URL, содержащих данные форм HTML или другую расширенную информацию. В следующем примере анализируется информация, переданная через URL. Строка представляет собой стандартный способ передачи данных между страницами либо откомпилированных в гиперссылке, либо введенных в форму HTML:
Поскольку эта функция создавалась для работы с URL, она игнорирует символ амперсанд (&).
explode()
Функция explode() делит строку на элементы и возвращает эти элементы в виде массива. Синтаксис функции explode():
array explode (string разделитель, string строка [, int порог])
Разбиение происходит по каждому экземпляру разделителя, причем количество полученных фрагментов может ограничиваться необязательным параметром порог.
Разделение строки функцией explode( ) продемонстрировано в следующем примере:
Функция explode( ) практически идентична функции регулярных выражений POSIX split( ), описанной выше. Главное различие заключается в том, что передача регулярных выражений в параметрах допускается только при вызове split( ).
implode()
string implode (string разделитель, array фрагменты)
Формирование строки из массива продемонстрировано в следующем примере:
strpos()
Функция strpos( ) находит в строке первый экземпляр заданной подстроки. Синтаксис функции strpos():
int strpos (string строка, string подстрока [, int смещение])
Необязательный параметр offset задает позицию, с которой должен начинаться поиск. Если подстрока не найдена, strpos() возвращает FALSE (0).
В следующем примере определяется позиция первого вхождения даты в файл журнала:
strrpos()
Функция strrpos( ) находит в строке последний экземпляр заданного символа. Синтаксис функции strrpos( ):
int strpos (string строка, char символ)
str_replace()
Функция str_replace( ) ищет в строке все вхождения заданной подстроки и заменяет их новой подстрокой. Синтаксис функции str_replace( ):
string str_replace (string подстрока, string замена, string строка)
Функция substr_replace( ), описанная ниже в этом разделе, позволяет провести заме ну лишь в определенной части строки. Ниже показано, как функция str_replace( ) используется для проведения глобальной замены в строке.
Если подстрока ни разу не встречается в строке, исходная строка не изменяется:
strstr()
Функция strstr( ) возвращает часть строки, начинающуюся с первого вхождения заданной подстроки. Синтаксис функции strstr( ):
string strstr (string строка, string подстрока)
В следующем примере функция strstr( ) используется для выделения имени домена из URL:
substr()
Функция substr( ) возвращает часть строки, начинающуюся с заданной начальной позиции и имеющую заданную длину. Синтаксис функции substr( ):
string substr (string строка, int начало [, int длина])
Если необязательный параметр длина не указан, считается, что подстрока начинается с заданной начальной позиции и продолжается до конца строки. При использовании этой функции необходимо учитывать четыре обстоятельства:
Помните о том, что параметр начало определяет смещение от первого символа строки; таким образом, возвращаемая строка в действительности начинается с символа с номером (начало + 1).
Следующий пример демонстрирует выделение части строки функцией substr( ):
Пример с положительным параметром длина:
Пример с отрицательным параметром длина:
substr_count()
substr_replace()
Функция substr_replace( ) заменяет часть строки, которая начинается с заданной позиции. Если задан необязательный параметр длина, заменяется фрагмент заданной длины; в противном случае производится замена по всей длине заменяющей строки. Синтаксис функции substr_replace( ):
string substr_replace (string строка, string замена, int начало [, int длина])
Параметры начало и длина задаются по определенным правилам:
Простая замена текста функцией substr_replace( ) продемонстрирована в следующем примере:
Преобразование строк и файлов к формату HTML и наоборот
Преобразовать строку или целый файл к формату, подходящему для просмотра в web-браузере (или наоборот), проще, чем может показаться на первый взгляд. В РНР для этого существуют специальные функции.
Преобразование текста в HTML
nl2br()
Функция nl2br() заменяет все символы новой строки (\n) эквивалентными конструкциями HTML.
Синтаксис функции nl2br():
string nl2br (string строка)
Символы новой строки могут быть как видимыми (то есть явно включенными в строку), так и невидимыми (например, введенными в редакторе). В следующем примере текстовая строка преобразуется в формат HTML посредством замены символов \n разрывами строк:
htmlentities()
Функция htmlentities( ) преобразует символы в эквивалентные конструкции HTML. Синтаксис функции htmlentities:
string htmlentities (string строка)
В следующем примере производится необходимая замена символов строки для вывода в браузере:
htmlspecialchars()
Функция htmlspecialchars( ) заменяет некоторые символы, имеющие особый смысл в контексте HTML, эквивалентными конструкциями HTML. Синтаксис функции htmlspecialchars( ):
string htmlspecialchars (string строка)
Функция html special chars( ) в настоящее время преобразует следующие символы: & преобразуется в &; » » преобразуется в «; преобразуется в >.
Следующий пример демонстрирует удаление потенциально опасных символов функцией htmlspeclalchars( ):
Если функция htmlspecialchars( ) используется в сочетании с nl2br( ), то последнюю следует вызывать после htmlspecialchars( ). В противном случае конструкции
, сгенерированные при вызове nl2br( ), преобразуются в видимые символы.
get_html_translation_table()
Функция get_html_translation_table( ) обеспечивает удобные средства преобразования текста в эквиваленты HTML Синтаксис функции get_htrril_translation_table( ):
string get_html_translation_table (int таблица)
Функция get_html_translation_table( ) возвращает одну из двух таблиц преобразования (определяется параметром таблица), используемых в работе стандартных функций htmlspecialchars( ) и htmlentities( ). Возвращаемое значение может использоваться в сочетании с другой стандартной функцией, strtr(), для преобразования текста в код HTML.
Параметр таблица принимает одно из двух значений:
В следующем примере функция get_html_translation_table( ) используется при преобразовании текста в код HTML:
В следующем примере исходный текст восстанавливается функцией array_flip( ):
strtr()
Функция strtr( ) транслирует строку, то есть заменяет в ней все символы, входящие в строку источник, соответствующими символами строки приемник. Синтаксис функции strtr( ):
string strtr (string строка, string источник, string приемник)
Если строки источник и приемник имеют разную длину, длинная строка усекается до размеров короткой строки.
Преобразование HTML в простой текст
Иногда возникает необходимость преобразовать файл в формате HTML в простой текст. Функции, описанные ниже, помогут вам в решении этой задачи.
strip_tags()
Функция strip_tags( ) удаляет из строки все теги HTML и РНР, оставляя в ней только текст. Синтаксис функции strip_tags( ):
string strip_tags (string строка [, string разрешенные_тerи])
Необязательный параметр разрешенные_теги позволяет указать теги, которые должны пропускаться в процессе удаления.
Ниже приведен пример удаления из строки всех тегов HTML функцией strip_tags( ):
В следующем примере удаляются не все, а лишь некоторые теги:
Удаление тегов из текста также производится функцией fgetss().
get_meta_tags()
Хотя функция get_meta_tags( ) и не имеет прямого отношения к преобразованию текста, зто весьма полезная функция, о которой следует упомянуть. Синтаксис функции get_meta_tags( ):
array get_meta_tags (string имя_файла/URL [, int включение_пути])
Функция get_meta_tags( ) предназначена для поиска в файле HTML тегов МЕТА.
Интересная подробность: данные тегов МЕТА можно извлекать не только из файлов, находящихся на сервере, но и из других URL.
Преобразование строки к верхнему и нижнему регистру
В РНР существует четыре функции, предназначенных для изменения регистра строки:
strtolower( )
Функция strtolower( ) преобразует все алфавитные символы строки к нижнему регистру. Синтаксис функции strtolower():
string strtolower(string строка)
Неалфавитные символы функцией не изменяются. Преобразование строки к нижнему регистру функцией strtolower() продемонстрировано в следующем примере:
strtoupper()
Строки можно преобразовывать не только к нижнему, но и к верхнему регистру. Преобразование выполняется функцией strtoupper(), имеющей следующий синтаксис:
string strtoupper (string строка)
Неалфавитные символы функцией не изменяются. Преобразование строки к верхнему регистру функцией strtoupper() продемонстрировано в следующем примере:
ucfirst()
string ucfirst (string строка)
Неалфавитные символы функцией не изменяются. Преобразование первого символа строки функцией ucfirst() продемонстрировано в следующем примере:
ucwords()
Функция ucwords( ) преобразует к верхнему регистру первую букву каждого слова в строке. Синтаксис функции ucwords():
string ucwords (string строка»)
Неалфавитные символы функцией не изменяются. «Слово» определяется как последовательность символов, отделенная от других элементов строки пробелами. В следующем примере продемонстрировано преобразование первых символов слов функцией ucwords( ):
strrchr()
Если подстрока не найдена, возвращает FALSE.
В отличие от strchr(), если искомая строка состоит более чем из одного символа, используется только первый символ.
Если второй параметр не является строкой, он приводится к целому и трактуется как код символа.
highlight_string()
mixed highlight_string (string str [, bool return])
Функция highlight_string() выводит версию с расцвеченным синтаксисом строки str, используя цвета, определённые во встроенном выделении синтаксиса PHP.
Если второй параметр return имеет значение TRUE, то highlight_string() возвратит версию раскрашенного кода как строку, вместо её печати. Если второй параметр не имеет значение TRUE, highlight_string() возвратит TRUE при успехе, FALSE при неудаче.
addslashes()
Возвращает сроку, в которой перед каждым спецсимволом добавлен обратный слэш (\), например для последующего использования этой строки в запросе к базе данных.
Экранируются одиночная кавычка (‘), дойная кавычка («), обратный слэш (\) и NUL (байт NULL).
Полезные PHP коды — для новичков
При написании кода в PHP есть задачи, которые встречаются чаще остальных или просто как-то выделяются из общего множества. В этой статье поговорим о некоторых из них.
Тут собрана лишь малая часть, и наверное это не последняя статья на тему несложных популярных задачек в PHP. Кроме того, я планирую дополнять эту статью.
Короткая запись операторов присваивания
Время выполнения PHP скрипта
Округление дробных чисел
Округление до целых
Чтобы округлить число в php существует несколько функций:
Округление до дробных
Округление последнего числа происходит как в математики: если следующее больше или равно 5 то в большую сторону, в остальных случаях в меньшую.
Целая часть и остаток от деления чисел
Чтобы получить остаток от деления можно воспользоваться оператором % :
Числа кратные к N или каждый N-ый блок в цикле
Нужно разделить число на число и если остатка нет, то первое число делиться нацело на второе, а значит кратное.
Где применить эту кратность?
Допустим, есть цикл записей и нужно к каждому третьему блоку добавить отдельный css класс. Тут-то кратность нам и поможет.
Форматирование чисел (денег) в PHP
Форматирует число с разделением групп.
number(обязательный)
Число, которое нужно отформатировать.
decimals
Сколько знаков после запятой показывать.
dec_point
Разделитель для дробной части.
Для форматирования с учетом языка сайта в WordPress есть специальная функция number_format_i18n()
Для вывода денежных величин используйте похожую функцию money_format()
Как получить ключи или значения ассоциативного PHP массива
Это может пригодится когда нужно сделать поиск по ключам массива. В PHP такой встроенной функции нет.
Создаем массив из диапазона чисел или букв
Как получить максимальное или минимальное число из массива в PHP
Также можно передать массив из чисел, тогда мин. или макс. число будет выбрано из значений массива.
Как получить часть строки (подстроку)
Однако нужно знать, что скорость их работы в разы ниже: substr() работает с одинаковой скоростью для строки любой длинны. А вот mb_substr() и iconv_substr() работают тем медленнее чем длине строка в них указывается. В среднем они в 5-10 раз медленнее, однако альтернатив нет, если нужно обработать кириллицу, придется использовать их.
Количество символов в строке
Как посчитать сколько раз встречается одна строка в другой
Удаление символов внутри строки
Сделать это можно многими способами, но самый простой это функция str_replace() :
Удаление символов на концах строки
Также, не все знают что есть аналогичные функции:
Удаление пустых символов на концах строки
Удаление указанных символов в начале и конце строки
Как перевернуть строку в PHP
День недели и месяц по-русски на PHP
Месяц по-русски
День недели
Есть что добавить? Милости прошу в комментарии.