Php длина строки

We just ran into what we thought was a bug but turned out to be a documented difference in behavior between PHP 5.2 & 5.3.  Take the following code example:

<?php

$attributes = array('one', 'two', 'three');

if (strlen($attributes) == 0 && !is_bool($attributes)) {
    echo
"We are in the 'if'n"//  PHP 5.3
} else {
    echo
"We are in the 'else'n"//  PHP 5.2
}


?>

This is because in 5.2 strlen will automatically cast anything passed to it as a string, and casting an array to a string yields the string "Array".  In 5.3, this changed, as noted in the following point in the backward incompatible changes in 5.3 (http://www.php.net/manual/en/migration53.incompatible.php):

"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.

php.net

http://php.net/manual/en/language.types.string.php говорит:

Примечание. Начиная с PHP 7.0.0, нет особых ограничений относительно длины строки в 64-битных сборках. В 32-битных сборках и в более ранних версиях строка может достигать 2 ГБ (максимум 2147483647 байт)

В PHP 5.x строки были ограничены 2 31 -1 байтами, потому что внутренний код записывал длину в 32-битное целое число.

Вы можете разгладить содержимое всего файла, например, используя file_get_contents()

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

Это ограничение является директивой memory_limit в файле конфигурации php.ini. Предел памяти по умолчанию равен 128 МБ в PHP 5.2 и 8 МБ в более ранних версиях.

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

Если вы укажете -1 как ограничение памяти в вашем файле php.ini, он прекратит проверку и позволит вашему сценарию использовать столько памяти, сколько будет выделено операционной системой. Это по-прежнему практический предел, но зависит от системных ресурсов и архитектуры.

Re comment from @ c2:

Вот тест:

   
<?php -- limit memory usage to 1MB ini_set('memory_limit', 1024*1024); -- initially, PHP seems to allocate 768KB for basic operation printf("memory: %dn", memory_get_usage(true)); $str = str_repeat('a', 255*1024); echo "Allocated string of 255KBn"; -- now we have allocated all of the 1MB of memory allowed printf("memory: %dn", memory_get_usage(true)); -- going over the limit causes a fatal error, so no output follows $str = str_repeat('a', 256*1024); echo "Allocated string of 256KBn"; printf("memory: %dn", memory_get_usage(true));

code-examples.net

Я использую document.getElementById("text").value.length чтобы получить длину строки через javascript и mb_strlen($_POST['text']) чтобы получить длину строки PHP, и оба очень сильно отличаются.
x412;озврат каретки преобразуется в javascript до получения длины строки, но я думаю, что некоторые символы не учитываются.

Например,

  • Отображение значения из базы данных в динамически созданное текстовое поле в таблице с помощью jQuery

  • Предварительный просмотр функции AJAX в раскрывающемся списке
  • Предотвращение JavaScript-инъекций в веб-приложении PHP
  • Получить значение reCaptcha через javascript?
  • Аккаунт Bootstrap Active для модальных скрытых

[B] 15. Umieszczanie obrazka z logo na stronie zespołu [/ b]

Этот блок текста вычисляется 57 в javascript и 58 в PHP. Когда текст становится длинным, разница увеличивается. Есть ли способ преодолеть это?


  • PHP / JS / JQUERY: интеллектуальный метод автоматической проверки / обновления состояния точек
  • есть что-то вроде isset php в javascript / jQuery?
  • Динамически загружать информацию в Twitter
  • Проверьте, включен ли GPS-устройство пользователя

  • Как сохранить переменную Javascript как файл на клиентском ПК

Related of «Длина строки Javascript отличается от PHP mb_strlen»

ruphp.com

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

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


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

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

<?

$foo=”foo”;

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

?>

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

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

<?

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

$bar=” мир!”;

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

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

?>

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

<?

$foo=”q”;

$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-скрипта.

fb.ru


PHP функция substr — получить часть строки

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

 <?php  $text="нас интересует кусок этого текста"; $cut=substr($text,4,10); echo $cut;//интересует $long=substr($text,15); echo $long;//кусок этого текста $first=substr($text,0,1); //первый символ строки  $last=substr($text,strlen($text)-1); //последний символ строки ?> 

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

PHP функция strlen — узнать длину строки

Эта функция возвращает длину исходной строки в виде целого числа.

 <?php $text='нас интересует длина строки'; $len=strlen($text); echo $len; //28 ?> 

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

PHP функция trim — убрать лишние пробелы по краям строки

Функция trim удаляет по краям строки любые пробельные символы, в том числе и символ перевода строки. Так же существуют функции rtrim и ltrim, которые удаляют пробелы вконце иили вначале строки.

 <?php $text=' нас интересует длина строки '; $text=trim($text);//удаляет пробелы с обеих сторон строки $text=rtrim($text);//удаляет пробелы справа т.е. вконце строки $text=ltrim($text);//удаляет пробелы слева, т.е. вначале строки ?> 

PHP функция strpos — осуществляет поиск в строке

функция strpos ищет подстроку в строке и в случае успеха возвращает позицию начала этой подстроки. После нахождения первой подстроки поиск прекращается.

 <?php $text='нас интересует где находится подстрока'; $sub='рес'; $pos1=strpos($text,$sub);//ищет с начала строки $pos2=strpos($text,$sub,5);//если поиск нужно начать не с начала строки, используем третий параметр ?> 

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

PHP функция strip_tags — удаляет тэги HTML и PHP из строки

Функция strip_tags возвращает строку, очищенную от тегов html и php. Она вам пригодится, когда вы будете писать модуль комментариев на свой сайт, что бы не оставить злоумышленикам возможности взломать ваш сайт через форму.

 <?php $text='все теги <strong>html</strong> и <em>php</em> должны быть удалены'; echo strip_tags($text); echo strip_tags($text,'<em>');//не удалять теги em ?> 

Первым аргуменом функции идет исходны текст, а вторым теги, которые не нжно удалять.

www.site-do.ru

Вычисляем длину строки

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

$x = "Этот случайный кусок текста";

Отлично, строка у нас есть. Теперь нам нужно определить ее длину. Это делается при помощи функции strlen, ее единственным и обязательным параметром является строка, количество символов в которой должно быть посчитано:
strlen ($x);
По умолчанию функция возвращает значение. То есть позднее вы его можете использовать в своих функциях и скриптах. Более удобно делать это даже так:
$xlength = strlen($x);
В переменную xlength записали длину строки $x.

Если же вам нужно вывести на экран длину строки, используйте уже известное вам слово echo.
echo $xlength;
Это учитывая, что мы уже создали такую переменную, если бы ее не было, можно было бы записать так:
echo strlen ($x);

Как видите, все предельно просто.

Использование длины строки в реальной практике

Ладно, с этим все понятно. Но наверняка вам интересно, где в реальной практике может применяться эта функция. Да на самом деле очень много вариантов. Например, с помощью этой функции можно проверять форму.

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

Нюансы работы функции strlen

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

Также, если в измеряемой строке нет ни одного символа, функция вернет значение 0. Стоит отметить, что ее не нужно использовать при попытке вычислить длину массива, потому что будет возвращен NULL. Применяйте strlen только для того, чтобы узнать длину строки.

Как узнать в php длину строки с учетом кодировки?

Функция iconv_strlen позволяет вторым параметром указать кодировку, если этого параметра не будет, он будет соответствовать своему значению по умолчанию. Пример:

$x = iconv_strlen('строка текста', 'UTF-8');

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

Посчитать количество слов в строке

Такая возможность тоже есть в php. Это выполняется с помощью функции str_word_count. У нее есть два основных параметра, они же и являются обязательными. Во-первых, это сама строка, количество слов в которой нужно посчитать. Во-вторых, это формат, в котором выведется значение. Есть еще третий необязательный параметр charlist — в нем можно указать список дополнительных символов, которые будут считаться как слова. Зачастую в нем нет нужды.

По сути, тут новым для нас является только параметр format, он может принимать 3 значения:

  1. 0 — возвращает просто количество найденных слов;
  2. 1 — массив слов, которые входят в строку;
  3. 2 — массив со словами, индексом каждого слова является его позиция в строке.

Пример использования функции:

$x = "строка текста"; str_word_count($x, 0);

В общем, пользуйтесь любой из этих трех функций, в зависимости от того, что именно вам нужно. У меня на этом все. smile

dolinacoda.ru

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

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

<?php
  $str = "This is my string";
  echo strlen($str);
?>

Думаю, что данная функция в комментариях не нуждается.

Также имеются две часто используемые строковые функции — это strtolower() и strtoupper(). Эти функции позволяют перевести строку в нижний и верхний регистр соответственно:

<?php
  $str = "This is my string";
  echo strtolower($str)."<br />";
  echo strtoupper($str);
?>

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

<?php
  $str = "This is my string";
  echo substr($str, 1)."<br />";
  echo substr($str, 4, 2)."<br />";
?>

Как видите, данная функция может содержать два, либо три параметра. Первый параметр — это исходная строка, второй параметр — это номер символа в исходной строке, который потом станет первым в полученной строке. Обратите внимание: нумерация символов начинается с 0 (то есть в нашем примере, 1-ый символ — «h«). Третий параметр означает длину строки, которую мы хотим получить. Если этот параметр не задан, то возвращается строка, начиная со второго параметра и до конца строки. В общем, смотрите на результат, и Вам всё станет ясно.

Ещё одна полезная строковая функция в PHP — это str_replace(). Как следует из названия, данная функция возвращает строку с заменой какой-то части:

<?php
  $str = "This is my string";
  echo str_replace("my", "your", $str);
?>

На выходе у нас получилась следующая строка: «This is your string«. То есть данная функция заменила строку, заданную первым параметром, на строку, заданную вторым параметром, в строке, заданной третьим параметром, и вернула результат.

И последняя функция, которую мы с Вами рассмотрим, — это strpos(). Данная функция ищет вхождение подстроки в строку и возвращает номер первого символа вхождения (напоминаю, что нумерация символов начинается с 0, а не с 1):

<?php
  $str = "This is my string";
  echo strpos($str, "is");
?>

Как видите, данная функция очень простая и очень важная, так как позволяет осуществлять поиск в строке. Также у функции strpos() есть ещё один необязательный параметр, задающий смещение. Напоминаю, что данная функция ищет первое вхождение. Например, в нашем примере «is» встречается в строке дважды, но вернула эта функция номер символа при первом вхождении. Поэтому для того, чтобы получить номера и других вхождений необходимо задавать третий параметр — смещение:

<?php
  $str = "This is my string";
  echo strpos($str, "is", 4);
?>

Таким образом, теперь мы получили номер символа в следующем вхождении. И, напоследок, хочется сказать, что если вхождение не будет найдено, то функция вернёт false. И вот на этом моменте у многих бывают ошибки. Давайте приведу простой пример:

<?php
  $str = "This is my string";
  if (strpos($str, "Th") == false) echo "Строка не найдена";
  else echo "Строка найдена";
?>

Очевидно, что «Th» содержится в исходной строке, и номер символа первого вхождения — это 0. Но если Вы запустите этот скрипт, то увидите, что «строка не найдена«. Почему? Если Вы читали статью об операторе эквивалентности, то без проблем ответите на этот вопрос. Однако, если нет, то поясняю. Дело в том, что так как у нас функция strpos() вернула 0, а 0 с точки зрения PHP — это false, то он без проблем сделал вывод о том, что условие истинно (ведь слева false и справа false). Как быть? Ответ прост: воспользоваться оператором эквивалентности (обозначается ===), который сравнивает не только значения (которые в нашем примере равны для PHP), но и их типы:

<?php
  $str = "This is my string";
  if (strpos($str, "Th") === false) echo "Строка не найдена";
  else echo "Строка найдена";
?>

И вот теперь Вы увидите, что «строка найдена«. Как видите, оператор эквивалентности может заявить о себе в любую минуту, и всегда нужно о нём помнить, иначе Вам не избежать труднодоступных ошибок.

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

myrusakov.ru

Спасибо за ответы, к сожалению, пока так
Вывод:
UTF-8
string(19) "привет мир"
int(10)

Даже не знаю, где искать причину

Добавлено через 18 часов 32 минуты
Помог сотрудник поддержки битрикса — Павел Рожкин, спасибо ему. Причина была в настройках mbstring.func_overload=2 и mbstring.internal_encoding=utf-8. При "перегрузке" функция strlen превращается в mb_strlen, которая, в свою очередь, считает многобайтные символы за 1.

Подробнее:
http://php.net/manual/ru/mbstring.overload.php
http://php.net/manual/ru/function.mb-strlen.php

По идее, меня должна спасти функция iconv_strlen, но почему-то на моём хостинге она работает не так, как на других (проверял):
Результат:
string(19) "привет мир"
10
10

А должно:
string(19) "привет мир"
10
19

Добавлено через 9 часов 48 минут
Я всё-таки разобрался. У меня не было выставлено значение iconv.internal_encoding. Именно оно используется по умолчанию функцией iconv_strlen(). Выставив значение второго параметра в ISO-8859-1, я добился правильного результата
Значение это подсмотрел с хостинга, где всё работало, вызвав ini_get_all()

Почему так произошло? Я обновлял окружение, а начиная с версии php 5.6 этот параметр признан устаревшим и вообще рекомендуется оставлять пустым. Вместо этого используется default_charset и вообще utf-8 становится кодировкой по умолчанию (вместо ISO-8859-1, полагаю). Подробнее в документации:

http://php.net/manual/ru/function.iconv-strlen.php
http://php.net/manual/ru/iconv.configuration.php
http://php.net/manual/ru/ini.core.php#ini.default-charset

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

www.cyberforum.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector