Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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);