String пример - Проверка длины строки в PHP. PHP: работа со строками

длина символах (7)

=> string(141) означает, что $ message - массив, поэтому вы должны сделать strlen($message) < 141 ...

У меня есть строка длиной 141 символ. Используя следующий код, у меня есть оператор if, чтобы вернуть сообщение, если строка больше или меньше 140.

Libxml_use_internal_errors(TRUE); $dom = new DOMDocument(); $dom->loadHTMLFile($source); $xml = simplexml_import_dom($dom); libxml_use_internal_errors(FALSE); $message = $xml->xpath("//div[@class="contest"]"); if (strlen($message) < 141) { echo "There Are No Contests."; } elseif(strlen($message) > 142) { echo "There is One Active Contest."; }

Я использовал var_dump в $ message, и он показывает, что строка => string(141) вот моя проблема. Когда я изменяю числа для оператора if на <130 и> 131, он все равно возвращает 1-е сообщение, хотя строка больше 131. Независимо от того, какое число я использую менее 141, я всегда получаю «Нет конкурсов». вернулся ко мне.

=> string(141) означает, что $ message - это массив, а не строка, а $ message - строка длиной 141 символ

xpath не возвращает строку. Он возвращает массив с элементами xml, которые могут быть отправлены в строку.

If (count($message)) { if (strlen((string)$message) < 141) { echo "There Are No Contests."; } else if(strlen((string)$message) > 142) { echo "There is One Active Contest."; } }

вместо этого попробуйте общий синтаксис:

If (strlen($message)<140) { echo "less than 140"; } else if (strlen($message)>140) { echo "more than 140"; } else { echo "exactly 140"; }

Поскольку $xml->xpath всегда возвращает массив , strlen ожидает строку .

У меня были проблемы с этим, и, наконец, я решил создать собственное решение. Без использования механизма регулярных выражений :

Function contains($text, $word) { $found = false; $spaceArray = explode(" ", $text); $nonBreakingSpaceArray = explode(chr(160), $text); if (in_array($word, $spaceArray) || in_array($word, $nonBreakingSpaceArray)) { $found = true; } return $found; }

Вы можете заметить, что предыдущие решения не являются ответом на то, что слово используется как префикс для другого. Чтобы использовать ваш пример:

$a = "How are you?"; $b = "a skirt that flares from the waist"; $c = "are";

С примерами выше, как $a и $b содержит $c , но вы можете захотеть, чтобы ваша функция сообщила вам, что только $a содержит $c .

"The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error."

So, in PHP 5.3, strlen($attributes) returns NULL, while in PHP 5.2, strlen($attributes) returns the integer 5. This likely affects other functions, so if you are getting different behaviors or new bugs suddenly, check if you have upgraded to 5.3 (which we did recently), and then check for some warnings in your logs like this:

strlen() expects parameter 1 to be string, array given in /var/www/sis/lib/functions/advanced_search_lib.php on line 1028

If so, then you are likely experiencing this changed behavior.

1 year ago

If your text contain UTF8 character (arabic character for example), the mb_substr can use instead of strlen.
but if the string contain UTF16 (wmoji, smily) then you can use this method to get correct length:

Because some emoji (ex : 📌 ) is 2 , 3 or 4 byte !

2 years ago

When checking for length to make sure a value will fit in a database field, be mindful of using the right function.

There are three possible situations:

1. Most likely case: the database column is UTF-8 with a length defined in unicode code points (e.g. mysql varchar(200) for a utf-8 database).

// ok if php.ini default_charset set to UTF-8 (= default value)
mb_strlen ($value );
iconv_strlen ($value );
// always ok
mb_strlen ($value , "UTF-8" );
iconv_strlen ($value , "UTF-8" );

// BAD, do not use:
strlen (utf8_decode ($value )); // breaks for some multi-byte characters
grapheme_strlen ($value ); // counts graphemes, not code points
?>

2. The database column has a length defined in bytes (e.g. oracle"s VARCHAR2(200 BYTE))

// ok, but assumes mbstring.func_overload is 0 in php.ini (= default value)
strlen ($value );
// ok, forces count in bytes
mb_strlen ($value , "8bit" )
?>

3. The database column is in another character set (UTF-16, ISO-8859-1, etc...) with a length defined in characters / code points.

Find the character set used, and pass it explicitly to the length function.

// ok, supported charsets:
mb_strlen ($value , $charset );
// ok, supported charsets: https://www.gnu.org/software/libiconv/
iconv_strlen ($value , $charset );
?>

6 years ago

PHP"s strlen function behaves differently than the C strlen function in terms of its handling of null bytes ("\0").

In PHP, a null byte in a string does NOT count as the end of the string, and any null bytes are included in the length of the string.

For example, in PHP:

strlen("te\0st") = 5

In C, the same call would return 2.

Thus, PHP"s strlen function can be used to find the number of bytes in a binary string (for example, binary data returned by base64_decode).

2 years ago

There"s a LOT of misinformation here, which I want to correct! Many people have warned against using strlen(), because it is "super slow". Well, that was probably true in old versions of PHP. But as of PHP7 that"s definitely no longer true. It"s now SUPER fast!

I created a 20,00,000 byte string (~20 megabytes), and iterated ONE HUNDRED MILLION TIMES in a loop. Every loop iteration did a new strlen() on that very, very long string.

The result: 100 million strlen() calls on a 20 megabyte string only took a total of 488 milliseconds. And the strlen() calls didn"t get slower/faster even if I made the string smaller or bigger. The strlen() was pretty much a constant-time, super-fast operation

So either PHP7 stores the length of every string as a field that it can simply always look up without having to count characters. Or it caches the result of strlen() until the string contents actually change. Either way, you should now never, EVER worry about strlen() performance again. As of PHP7, it is super fast!

Here is the complete benchmark code if you want to reproduce it on your machine:

$iterations = 100000000 ; // 100 million
$str = str_repeat ("0" , 20000000 );

// benchmark loop and variable assignment to calculate loop overhead
$start = microtime (true );
for($i = 0 ; $i < $iterations ; ++ $i ) {
$len = 0 ;
}
$end = microtime (true );
$loop_elapsed = 1000 * ($end - $start );

// benchmark strlen in a loop
$len = 0 ;
$start = microtime (true );
for($i = 0 ; $i < $iterations ; ++ $i ) {
$len = strlen ($str );
}
$end = microtime (true );
$strlen_elapsed = 1000 * ($end - $start );

// subtract loop overhead from strlen() speed calculation
$strlen_elapsed -= $loop_elapsed ;

echo "\nstring length: { $len } \ntest took: { $strlen_elapsed } milliseconds\n" ;

?>

5 years ago

Function limit_text($text, $limit = 100000000000) {
if (strlen ($text) < $limit) {
return $text;
}
$split_words = explode(" ", $text);
$out = null;
foreach ($split_words as $word) {
if ((strlen($word) > $limit) && $out == null) {
return substr($word, 0, $limit)."...";
}

If ((strlen($out) + strlen($word)) > $limit) {
return $out . "...";
}
$out.=" " . $word;
}
return $out;
}

echo limit_text("hello world lorem ipsum",10);

Любой уважающий себя веб-программист должен знать язык РНР, который может использоваться для создания веб-страниц. Этот язык основан на С и С++, и поэтому в нём присутствует множество конструкций, характерных для этого языка. Например, в PHP длина строки возвращается функцией с таким же названием, как и в С. Эта статья рассказывает о строках, а также об операциях, которые можно выполнять с ними.

Но прежде чем говорить о функциях, дадим основное определение. Строка - это последовательность символов, каждый из которых занимает ровно один байт. Значит, в РНР поддерживается 256 символов. Из этого логично вытекает, что поддержка Юникода в данном языке отсутствует - ведь в Юникоде символов гораздо больше.

Какие же операции со строками есть в PHP? Длина строки, их конкатенация (соединение), возвращение кода символа и наоборот - самые простые примеры. Есть и посложнее - поиск подстроки, хеширование, инвертирование. А есть и такие как удаление тегов, поиск по шаблону, разбивка на подстроки с помощью разделителя… Всего не перечислишь! Поэтому мы расскажем о наиболее распространённых и полезных из них.

Самая первая и часто используемая функция в PHP - длина строки. Называется она strlen, а в качестве параметра принимает одну-единственную последовательность символов. Всё просто.

$bar=strlen ($foo); // $bar равен трём

В PHP длина строки может быть равна нулю. Такая строка называется пустой.

Следующая функция - конкатенация или слияние. Проще говоря, она из двух строк делает одну.

$foo=”Привет,”;

$bar=” мир!”;

$baz=concat ($foo, $bar);

echo $baz; // выведет “Привет, мир!”

Есть и две обратные функции для работы с отдельными символами. Ord - возвращает код символа, а chr - определяет символ по коду.

$bar=ord ($foo); // $bar равен 113

$baz=chr ($bar); // $baz равен “q”

Нельзя не упомянуть ещё об одной интересной функции - date. В PHP строки могут использоваться в качестве шаблона для вывода времени. Например, если передать в date строку “H:m:s” и вывести результат, то на экране появится текущее время сервера, разделённое двоеточием, например, “11:08:34”.

Теперь рассмотрим функцию explode. Она разбивает строку на элементы, считая границей каждого указанный символ. Звучит довольно сложно, но на самом деле всё достаточно понятно. Например, есть строка “root|12:56:49|wheel”. Тогда можно написать так:

$foo=explode(“root|12:56:49|wheel”, “|”);

В итоге массив $foo будет содержать три элемента - “root”, “12:56:49”, “wheel”. Если при вызове функции не указывать разделитель, то по умолчанию он будет считаться пробелом. Есть ещё один необязательный параметр - максимальное количество выделяемых подстрок.

Следующая функция удаляет из строки HTML-теги. Называется она strip_tags. Как и у функции explode, у неё есть необязательный второй параметр - список тегов, которые необходимо оставить.

Простые функции - конкатенация, поиск подстроки, длина строки - PHP интерпретирует достаточно быстро. А вот обработка поиска по шаблону или удаление тегов может выполняться достаточно долго. Поэтому программы нужно составлять грамотно, с учётом того, что её выполнение занимает определённое время. Нормальный скрипт должен выполняться максимум 10 секунд, а после этого нужно отобразить хотя бы часть веб-страницы, иначе пользователь с неё уйдёт. Но обычно веб-приложения работают гораздо быстрее, ведь РНР-код выполняется на сервере, и браузер принимает сформированную на основе скрипта страницу, в которой содержится вывод PHP-скрипта.

» Длина строки в PHP

Навигация по Самоучителю: 1.1 О PHP 1.2 История PHP 1.3 Почему именно PHP? 1.4 Как это все (PHP) работает? 1.5 От интерпретатора к компилятору 1.6 Возможности PHP 1.7 Что необходимо для работы? 1.8 Ответы на ваши вопросы 1.9 Заключение к главе 2.1 Установка и конфигурирование 2.2 Установка Apache 2.3 Установка PHP 2.4 Установка MySQL 2.5 Настройка Apache 2.6 Настройка PHP 2.7 Настройка MySQL 2.8 Тестирование программ Apache, PHP 2.9 Заключение к главе 2 3.1 Синтаксис языка PHP 3.2 Профессиональная вставка 3.3 РНР и HTML 3.4 Комментарии в языке (коде) PHP 3.5 Оформление PHP кода программы 3.6 Заключение к главе 3 4.1 Переменные. Что такое переменные? 4.2 Переменные. Типы данных в PHP 4.3 Integer. Тип данных. 4.4 Double. Тип данных. 4.5 Boolean. Тип данных. 4.6 Другие типы данных 4.7 Определение переменных в PHP 4.8 Изменение типа данных в PHP 4.9 Ссылки на переменные в PHP 4.10 Динамические переменные в PHP 4.11 Что такое Константы в PHP? 4.12 Определение констант в языке PHP 4.13 Предопределенные константы в языке PHP 4.14 Заключение к главе 4 5.1 Операторы в PHP 5.2 Оператор присваивания в PHP 5.3 Арифметические операторы в PHP 5.4 Операторы отношения в PHP 5.5 Логические операторы в PHP 5.6 Поразрядные операторы в PHP 5.7 Строковые операторы в PHP 5.8 Оператор подавления ошибок в PHP 5.9 Операторы увеличения и уменьшения в PHP 5.10 Сокращенная запись присвоения переменных в PHP 5.11 Приоритетность и ассоциативность в PHP 5.12 Заключение к главе 5 6.1 Управляющие операторы PHP 6.2 Условный оператор IF 6.3 Условный оператор Elseif 6.4 Условный оператор Switch 6.5 Операторы цикла For 6.6 Оператор цикла While 6.7 Оператор цикла Do...while 6.8 Безусловный оператор Break 6.9 Безусловный оператор Continue 6.10 Безусловный оператор Exit 6.11 Require 6.12 Include 6.13 Заключение к главе 6 7.1 Функции в PHP 7.2 Определение функций в PHP 7.3 Аргументы функций в PHP 7.4 Область видимости переменных 7.5 Время жизни переменных в PHP 7.6 Рекурсия в PHP 7.7 Динамический вызов функций в PHP 7.8 Заключение к главе 7 8.1 Массивы в PHP 8.2 Присвоение значений массивов PHP 8.3 Функция array () PHP 8.4 Вывод PHP массивов 8.5 Обход массивов PHP. Функция count(), Конструкции foreach() 8.6 Функция reset() 8.7 each() 8.8 list() 8.9 Сложение массивов 8.10 Сравнение массивов 8.11 Добавление элементов массива 8.12 Удаление элементов массива 8.13 Сортировка массивов 8.14 Многомерные массивы 8.15 Преобразование в массив 8.16 Заключение к главе 8 9.1 Строка 9.2 Обработка переменных внутри строк 9.3 Вывод строк 9.4 Форматированный вывод строк 9.5 Длина строки в PHP 9.6 Поиск подстроки в строке 9.7 Чистка строк 9.8 Заключение к главе 9 10.1 Работа с HTML-формами 10.2 Передача данных HTML-формы. Метод GET и POST 10.3 Получение данных в PHP 10.4 Суперглобальные массивы $_GЕТ и $_POST 10.5 Заключение к главе 10 11.1 Открытие файлов в PHP 11.2 Закрытие файлов в PHP 11.3 Чтение и запись файлов в PHP 11.4 Копирование, удаление и переименование файлов в PHP 11.5 Получение информации о файлах в PHP 11.6 Файловый указатель в PHP 11.7 Открытие и закрытие каталогов в PHP 11.8 Чтение каталогов в PHP 11.9 Создание и удаление каталогов в PHP 11.10 Заключение к главе 11 12.1 Работа с базами данных MySQL в PHP 12.2 Соединение PHP с сервером базы данных MySQL 12.3 Создание и удаление базы данных MySQL 12.4 Создание и удаление таблиц MySQL 12.5 Работа с данными MySQL 12.6 Заключение к главе 12 13.1 Работа с изображениями в PHP. Библиотека GD 13.2 Создание и вывод изображений в PHP 13.3 Модификация изображений в PHP 13.4 Работа с текстом в PHP 13.5 Заключение к главе 13 14.1 Работа с датой и временем в PHP 14.2 Символы форматирования даты и времени в PHP 14.3 Функция date() и getdate() в PHP 14.4 Преобразования к абсолютному времени в PHP 14.5 Заключение к главе 14 15.1 Работа с регулярными выражениями в PHP 15.2 Регулярные выражения POSIX в PHP 15.3 Метасимволы в PHP 15.4 Классы символов 15.5 Квантификаторы 15.6 Замена по шаблону 15.7 Примеры регулярных выражений 15.8 Заключение к главе 15 16.1 Работа с Cookies в PHP 16.2 Создание Cookies в PHP 16.3 Чтение из Cookies 16.4 Удаление Cookies 16.5 Заключение к главе 16

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

Листинг 9.12. Определение длины строки.

‹html›
‹head›
‹title› Определение длины строки ‹/title›
‹/head›
‹body›
‹?php
// строка
$str = "Hello, World!";
// длина строки
$len = strlen($str);
// посимвольный вывод строки
for ($i=0;$i {
echo $str[$i];
echo "‹br›";
}
?›
‹/body›
‹/html›

Результат выполнения этой программы смотрите ниже.

Первое, что бросается в глаза, - это присутствие квадратных скобок, так как они использовались при работе с массивами. Здесь нет ничего странного, просто в PHP, как и во многих других языках программирования, строку можно воспринимать как массив символов, проиндексированный целыми числами, начиная с нуля.

Итак, вернемся к нашему примеру. Сначала мы инициализируем строку, затем с помощью функции strlen() получаем ее длину в виде целочисленного значения, которое запишем в переменную $len. Далее создаем простой цикл for на $len итераций. У многих начинающих программистов часто возникает соблазн не использовать дополнительную переменную для хранения длины строки. Действительно, функцию strlen() можно записать прямо в определении цикла for. Например: for ($i=0; $i

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

Поделиться