Strlen php неправильно считает

Почему strlen «видит» больше символов чем есть?

Но тут собственно, возникла проблемка.. в тексте 1045 символов онлайн считалка насчитала, а стрлен возвращает 1463, собственно откуда она насчитала еще 4 сотни?
И еще иногда вылетает последним символом вопрос(как при неверной кодировке), что это может быть?
Кстати если добавлять картинки, то ссылки на них как я понимаю лучше хранить в отдельной ячейке?

ыфвафывафывафыафывафывафывафывафывафывафыафывафвыафыва фывафыва ыфа фы ваыфв афыа фыв афы ва фыва фываф ыва фыва фыва афыв аыфв афыв афывоа фыоав длфыова длоыал дофыдлвао ывл аодфы одлф одфыо флы оадфыо даофы влоадфыо алдфы одфоыда офыал одыфв оалфыоад ыфвоа лфыовад фыоалыоа дфлывоа лдфыов алфоыа дофыадл фыовлаоф дова длофыалдоф ыдвлао лфыо адыво адлыова доыва лыова дво адыво алдвыоа фывлао лыдваолдывоалд ыфовлдаофлды оадлыов лдовфыадл оывд лаоыв лаоывдао длываоыфдво адфыводыв asfsadfaslfj slkfdj aslkjf slfjd klasdjfl asdjf lksadjf lasd jfasd fjlaksfj sakl fjskldjf lkasdjf lasjdfkl asjfklasjd lkfjsakjfa kdlfj alsk fjask fjlasj fkasj fklasjf ksd fjklasfj aklsj fasdf lkjafk lasjfd klasjdfklasjdfkajs kflajsdf jasdl kfjaskl fjaks jfkalsj dflj lsadfj asd fjaslkfj askfj skfj skfj asklfjslkf jsadl fjsdl kfjasdflkasjdafkjsd lfkjsadl fkjasdlkfa jld fjasfdj kasjdf klsdj fsklajf lksfdjklsd fjksldfj skldjfklsdjfslkdfjdskljafkalsjfdklasjdf klsjfd dfkasjdfk lasjdfklasj fklsadjf klsadjf alsdfj alskfj aslkdjf sakl fjsakljf aslkdfj klasjf lsakfdj

Система «видит» больше оперативке че есть в наличии
У меня на компе стояло 2 гига оперативки. В какой-то момент я запустил диспетчер задач ( стоит.

Читайте также:  Plotly express python install

Как написать регулярное выражение для выдергивания английских букв и символов: «+», «,», «:», «-«, » «, «!», «?» и «.»
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и.

Если в строке больше букв «А», чем букв «О», вывести в центре экрана слово «привет»
Помогите составить алгоритм к задаче: Заполнить левую половину экрана синим цветом, правую -.

 $text="ыфвафывафывафыафывафывафывафывафывафывафыафывафвыафыва фывафыва ыфа фы ваыфв афыа фыв афы ва фыва фываф ыва фыва фыва афыв аыфв афыв афывоа фыоав длфыова длоыал дофыдлвао ывл аодфы одлф одфыо флы оадфыо даофы влоадфыо алдфы одфоыда офыал одыфв оалфыоад ыфвоа лфыовад фыоалыоа дфлывоа лдфыов алфоыа дофыадл фыовлаоф дова длофыалдоф ыдвлао лфыо адыво адлыова доыва лыова дво адыво алдвыоа фывлао лыдваолдывоалд ыфовлдаофлды оадлыов лдовфыадл оывд лаоыв лаоывдао длываоыфдво адфыводыв asfsadfaslfj slkfdj aslkjf slfjd klasdjfl asdjf lksadjf lasd jfasd fjlaksfj sakl fjskldjf lkasdjf lasjdfkl asjfklasjd lkfjsakjfa kdlfj alsk fjask fjlasj fkasj fklasjf ksd fjklasfj aklsj fasdf lkjafk lasjfd klasjdfklasjdfkajs kflajsdf jasdl kfjaskl fjaks jfkalsj dflj lsadfj asd fjaslkfj askfj skfj skfj asklfjslkf jsadl fjsdl kfjasdflkasjdafkjsd lfkjsadl fkjasdlkfa jld fjasfdj kasjdf klsdj fsklajf lksfdjklsd fjksldfj skldjfklsdjfslkdfjdskljafkalsjfdklasjdf klsjfd dfkasjdfk lasjdfklasj fklsadjf klsadjf alsdfj alskfj aslkdjf sakl fjsakljf aslkdfj klasjf lsakfdj"; echo strlen($text); ?>"] $text="ыфвафывафывафыафывафывафывафывафывафывафыафывафвыафыва фывафыва ыфа фы ваыфв афыа фыв афы ва фыва фываф ыва фыва фыва афыв аыфв афыв афывоа фыоав длфыова длоыал дофыдлвао ывл аодфы одлф одфыо флы оадфыо даофы влоадфыо алдфы одфоыда офыал одыфв оалфыоад ыфвоа лфыовад фыоалыоа дфлывоа лдфыов алфоыа дофыадл фыовлаоф дова длофыалдоф ыдвлао лфыо адыво адлыова доыва лыова дво адыво алдвыоа фывлао лыдваолдывоалд ыфовлдаофлды оадлыов лдовфыадл оывд лаоыв лаоывдао длываоыфдво адфыводыв asfsadfaslfj slkfdj aslkjf slfjd klasdjfl asdjf lksadjf lasd jfasd fjlaksfj sakl fjskldjf lkasdjf lasjdfkl asjfklasjd lkfjsakjfa kdlfj alsk fjask fjlasj fkasj fklasjf ksd fjklasfj aklsj fasdf lkjafk lasjfd klasjdfklasjdfkajs kflajsdf jasdl kfjaskl fjaks jfkalsj dflj lsadfj asd fjaslkfj askfj skfj skfj asklfjslkf jsadl fjsdl kfjasdflkasjdafkjsd lfkjsadl fkjasdlkfa jld fjasfdj kasjdf klsdj fsklajf lksfdjklsd fjksldfj skldjfklsdjfslkdfjdskljafkalsjfdklasjdf klsjfd dfkasjdfk lasjdfklasj fklsadjf klsadjf alsdfj alskfj aslkdjf sakl fjsakljf aslkdfj klasjf lsakfdj"; echo "Количество символов: ".strlen($text); ?>

Выводит:
Количество символов: 1045

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

ЦитатаСообщение от r36 Посмотреть сообщение

нет, тоже думал что в этом проблема, но потом специально зашел в БД и удалил все оставив только текст.

ЦитатаСообщение от Humanoid Посмотреть сообщение

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

strlen считает не символы, а байты. Читайте документацию внимательнее.

В 1 символе в кодировке UTF-8 содержится от 1 до 6 байт.

Определить, что в введенной строке букв «а» больше, чем «б»
Задание : Составить программу, организующую работу с пользователем в диалоговом режиме: программа.

Определить,есть ли в этой строке русские символы «а» и «е» ,а также количество каждого из этих символов
Дана строка символов.Определить,есть ли в этой строке русские символы "а" и "е" ,а также количество.

Напишите программу для проверки, есть ли в слове X буква «о». Если есть, то замените все буквы «о» на «ку»
ребятки, очень прошу помогите!!))) вот такую штуку надо сделать в паскале, а я не очень в этом.

Если в A13 есть текст, а в B13 число больше 1, то пишется «pcs»»
Задача: если в A13 есть текст, а в B13 число больше 1, то в ячейке пишется pcs; и.

Источник

PHP не правильно возвращает подстроку, как считать спец символы и смайлы?

Если в тексте есть emoji и спец символы php начинает не правильно считать strlen() и от этого substr неправильно выбирает значение.

'⚡️ локальные группы, ⚡️Больше возможностей• Теперь Вы ⚡️'.substr(3,9) #Выведет локальные
$text = '⚡️ локальные группы, ⚡️Больше возможностей• Теперь Вы ⚡️ '; echo grapheme_substr($text, 3, 9); #Выведет: окальные echo mb_substr($text, 3, 9); #Выведет: окальные

Простой 1 комментарий

tioffs

function mb_strlen($text) < $length = 0; $textlength = strlen($text); for ($x = 0; $x < $textlength; $x++) < $char = ord($text[$x]); if (($char & 0xC0) != 0x80) < $length += 1 + ($char >= 0xf0); > > return $length; > function mb_substr($text, $offset, $length = null) < $mb_text_length = mb_strlen($text); if ($offset < 0) < $offset = $mb_text_length + $offset; >if ($length < 0) < $length = ($mb_text_length - $offset) + $length; >elseif ($length === null) < $length = $mb_text_length - $offset; >$new_text = ''; $current_offset = 0; $current_length = 0; $text_length = strlen($text); for ($x = 0; $x < $text_length; $x++) < $char = ord($text[$x]); if (($char & 0xC0) != 0x80) < $current_offset += 1 + ($char >= 0xf0); if ($current_offset > $offset) < $current_length += 1 + ($char >= 0xf0); > > if ($current_offset > $offset) < if ($current_length > > return $new_text; >

5d34691878d07649165529.png

tioffs

5d346c1d7f5f3797011573.jpeg

тостер не все emoji понимает поэтому вставил тот, но сути не меняет.
Есть emoji и спец символы которые равны 2 байта 4 и 8 байт

irishmann

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

tioffs

А по примеру кода не видно что я использую mb_ ?
strlen() — просто как пример был указан
есть варианты:
grapheme_strlen()
mb_strlen()

смысл в том что 1 символ юникода = 1 байт
а смайлы emoji и спец символы могут быть 2 байта или 4 байта, js определяет все по 2 байта а пых начинает возвращать бредятину.

не пишите больше бреда такого когда не прочитали до конца проблему

Источник

PHP обрезает строку, хотя strlen выдаёт правильную длину, как это исправить?

Получаю данные по API, это строка в формате json 6000-7000 символов. Раньше всё работало, но с обновлением данных API(видимо увеличилась длинна ответа). Причём когда я запрашиваю длину через strlen()
Длинна правильная. Я полагаю что дело в настройках php, т.к. других вариантов я не вижу.

Но есть ещё один странный факт, при использовании mb_substr

При следующем коды, вывод такой.

$data = file_get_contents($path); echo(strlen($data)); echo '
'; $data2 = mb_substr($data, 0); echo(strlen($data2)); dd($data2);

3lt4eudkeyfsgwq_p57pgnoepba.png

Но как только мы добавляем значение.

$data = file_get_contents($path); echo(strlen($data)); echo '
'; $data2 = mb_substr($data, 500); echo(strlen($data2)); dd($data2);

20zl1bc_6hyw2mdk5y9twzp8mc8.png

$data = file_get_contents($path); echo(strlen($data)); echo '
'; $data2 = mb_substr($data, 3000); echo(strlen($data2)); dd($data2);

mhnojizobdu25jldionfcl-0fb4.png

Выводимая строка обрезается, а вот значение strlen меняется, тоже без понятия с чем это связано.

Простой 4 комментария

Источник

Форум PHP программистов ► PHP практикум ► PHP для начинающих

Завсегдатай форума

Профиль
Группа: ★ЛжеЭксперт★

Сообщений: 5978
Пользователь №: 32538
На форуме:
Карма: 67

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 36046
На форуме:
Карма: 1

Valick
Winston
Zzepish
Ясно спасибо большое ! А то я уже начал гуглить по поводу настроек денвера..

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 36046
На форуме:
Карма: 1

Zzepish
А как правильно ее использовать что то я пишу mb_strlen($text) все равно тоже самое выводит..
как правильно писать то подскажите пожалуйста?

Завсегдатай форума

Профиль
Группа: ★ЛжеЭксперт★

Сообщений: 5978
Пользователь №: 32538
На форуме:
Карма: 67

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 36046
На форуме:
Карма: 1

Завсегдатай форума

Профиль
Группа: ★ЛжеЭксперт★

Сообщений: 5978
Пользователь №: 32538
На форуме:
Карма: 67

Завсегдатай форума

Профиль
Журнал
Группа: ★ЛжеЭксперт★

Сообщений: 26770
Пользователь №: 21350
На форуме:
Карма: 756

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 36046
На форуме:
Карма: 1

Zzepish
А еще если Вас не затруднит, не могли бы помочь разобраться?
Вот я хочу допустим из переменной вытащить букву русские у меня нормально не получается вытащить потому что что то с кодировкой выдает вот такой вопрос в ромбике � а английские нормально выводит делаю я вот так :

$a = «привет»;
echo $a0>; // должно быть «п» а у меня вопрос в ромбике..

Сообщений: 9509
Пользователь №: 18161
На форуме:
Карма: 552

Сообщений: 9606
Пользователь №: 26630
На форуме:
Карма: 664

Цитата (slavon1500 @ 7.01.2013 — 15:37)
А как правильно ее использовать что то я пишу mb_strlen($text) все равно тоже самое выводит..

чтобы не указывать кодировку каждый раз при вызове mb_ функций, можно один раз в начале её указать явно

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 36046
На форуме:
Карма: 1

Профиль
Группа: Пользователь
Сообщений: 46
Пользователь №: 36046
На форуме:
Карма: 1

Winston
не понял как нужно делать по вашему методу
получилось по методу пользователя nugle через функцию mb_strtoupper все получилось без всяких вопросов отлично спасибо за помощь! только пожалуйста если не сложно можете объяснить как по вашему методу работать ? (что там столько много писанины..)

Это сообщение отредактировал slavon1500 — 7.01.2013 — 19:28

Источник

Оцените статью