Измерьте размер строки в байтах в php
Я делаю канал недвижимости для портала, и он говорит мне, что максимальная длина строки должна быть 20 000 байтов (20 КБ), но я никогда раньше не сталкивался с этим.
Как измерить размер byte
varchar string
. Поэтому я могу сделать цикл while, чтобы обрезать его.
Ответы
Ответ 1
Вам нужно выяснить, закодирована или закодирована строка в формате нескольких байтов.
В первом случае вы можете просто использовать strlen
.
В последнем случае вам нужно найти количество байтов на символ.
документация strlen дает пример того, как это сделать: http://www.php.net/manual/en/function.strlen.php#72274
Ответ 2
Вы можете использовать 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 ]] )
Ответ 3
Вы имеете в виду размер байта или длину строки?
Размер байта измеряется с помощью strlen()
, тогда как длина строки запрашивается с помощью mb_strlen()
. Вы можете использовать substr()
для обрезки строки в X байтах (обратите внимание, что это приведет к поломке строки, если она содержит многобайтовое кодирование, как указано Darhazer в комментариях) и mb_substr()
, чтобы обрезать ее до X символов в кодирование строки.
Ответ 4
PHP strlen()
функция возвращает количество символов 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);
Ответ 5
В дополнение к ответам PhoneixS, чтобы получить правильную длину строки в байтах. Поскольку mb_strlen()
работает медленнее, чем strlen()
, для лучшей производительности можно проверить установку "mbstring.func_overload" ini, чтобы использовать только mb_strlen()
когда это действительно необходимо:
$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);