longitud array php string string-length

array - Medir el tamaño de la cadena en Bytes en PHP



strlen php (5)

¿Quiere decir tamaño de byte o longitud de cadena?

El tamaño del byte se mide con strlen() , mientras que la longitud de la cadena se consulta utilizando mb_strlen() . Puede usar substr() para recortar una cadena a X bytes (tenga en cuenta que esto romperá la cadena si tiene una codificación de múltiples bytes, como lo señaló Darhazer en los comentarios) y mb_substr() para recortarla a X caracteres en La codificación de la cadena.

Estoy haciendo un feed de bienes raíces para un portal y me está diciendo que la longitud máxima de una cadena debería ser de 20,000 bytes (20kb), pero nunca antes he encontrado esto.

¿Cómo puedo medir el tamaño de byte de una varchar string . Entonces puedo hacer un bucle while para recortarlo.


Además de la respuesta de PhoneixS para obtener la longitud correcta de la cadena en bytes, ya que mb_strlen() es más lento que strlen() , para el mejor rendimiento, se puede verificar la configuración de ini "mbstring.func_overload", de modo que mb_strlen() se use solo cuando está realmente requerido:

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


Debe averiguar si la cadena está codificada en ASCII o codificada con un formato de múltiples bytes.

En el primer caso, puedes usar strlen .

En este último caso, debe encontrar el número de bytes por carácter.

la documentación de strlen da un ejemplo de cómo hacerlo: http://www.php.net/manual/en/function.strlen.php#72274


La función strlen() PHP devuelve el número de caracteres ASCII.

strlen(''borsc'') -> 5 (bytes)

strlen(''boršč'') -> 7 (bytes)

$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

.. o puedes usar una función como esta:

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);


Puede usar mb_strlen () para obtener la longitud del byte usando una codificación que solo tiene caracteres de byte, sin preocuparse por las cadenas multibyte o de un solo byte. Por ejemplo, como dice drake127 en un comentario de mb_strlen, puedes usar la codificación ''8bit'':

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

Puede tener problemas al usar la función strlen ya que php tiene la opción de sobrecargar strlen para llamar a mb_strlen. Ver más información al respecto en php.net/manual/en/mbstring.overload.php

Para recortar la cadena por la longitud del byte sin dividir en medio de un carácter multibyte puede usar:

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