Измерьте размер строки в байтах в php

Я делаю фид недвижимости для портала, и он говорит мне, что максимальная длина строки должна быть 20 000 байт (20 КБ), но я никогда не сталкивался с этим раньше.

Как я могу измерить размер byte varchar string . Поэтому я могу сделать цикл while, чтобы обрезать его.

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

В первом случае вы можете просто использовать strlen .

В последнем случае вам нужно найти количество байтов на символ.

документация strlen дает пример того, как это сделать: http://www.php.net/manual/en/function.strlen.php#72274

Вы можете использовать mb_strlen (), чтобы получить длину байта, используя кодировку, которая имеет только байтовые символы, не беспокоясь о многобайтовых или однобайтовых строках. Например, как сказал drake127 в комментарии mb_strlen, вы можете использовать кодировку «8 бит»:

 <?php $string = 'Cién cañones por banda'; echo mb_strlen($string, '8bit'); ?> 

У вас могут быть проблемы с использованием функции strlen, поскольку php имеет возможность перегрузить strlen, чтобы на самом деле вызвать mb_strlen. Подробнее об этом см. В http://php.net/manual/en/mbstring.overload.php

Для обрезки строки длиной байта без разделения в середине многобайтового символа вы можете использовать:

 mb_strcut(string $str, int $start [, int $length [, string $encoding ]] ) 

Вы имеете в виду размер байта или длину строки?

Размер байта измеряется с помощью strlen() , тогда как длина строки запрашивается с использованием mb_strlen() . Вы можете использовать substr() для обрезки строки в X байтах (обратите внимание, что это приведет к поломке строки, если она имеет многобайтную кодировку, как указано Darhazer в комментариях) и mb_substr() чтобы обрезать ее до X символов в кодирование строки.

Функция strlen() PHP возвращает количество символов ASCII.

strlen('borsc') -> 5 (байт)

strlen('boršč') -> 7 (байт)

 $limit_in_kBytes = 20000; $pointer = 0; while(strlen($your_string) > (($pointer + 1) * $limit_in_kBytes)){ $str_to_handle = substr($your_string, ($pointer * $limit_in_kBytes ), $limit_in_kBytes); // here you can handle (0 - n) parts of string $pointer++; } $str_to_handle = substr($your_string, ($pointer * $limit_in_kBytes), $limit_in_kBytes); // here you can handle last part of string 

.. или вы можете использовать такую ​​функцию:

 function parseStrToArr($string, $limit_in_kBytes){ $ret = array(); $pointer = 0; while(strlen($string) > (($pointer + 1) * $limit_in_kBytes)){ $ret[] = substr($string, ($pointer * $limit_in_kBytes ), $limit_in_kBytes); $pointer++; } $ret[] = substr($string, ($pointer * $limit_in_kBytes), $limit_in_kBytes); return $ret; } $arr = parseStrToArr($your_string, $limit_in_kBytes = 20000); 

В дополнение к ответам PhoneixS, чтобы получить правильную длину строки в байтах. Поскольку mb_strlen() работает медленнее, чем strlen() , для лучшей производительности можно проверить установку «mbstring.func_overload» ini, чтобы mb_strlen() использовался только тогда, когда она действительно требуется:

 $content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);