61 votes

Mesurer la taille de la chaîne en octets en php

Je fais un flux immobilier pour un portail et il me dit que la longueur maximale d'une chaîne devrait être de 20 000 octets (20 Ko), mais je n'ai jamais rencontré cela auparavant.

Comment puis-je mesurer la byte d'un varchar string . Je peux donc faire une boucle while pour le réduire.

30voto

Foo Bah Points 11566

Vous devez déterminer si la chaîne est encodée en ascii ou encodée avec un format multi-octets.

Dans le premier cas, vous pouvez simplement utiliser strlen .

Dans ce dernier cas, vous devez trouver le nombre d'octets par caractère.

la documentation strlen donne un exemple de comment faire : http://www.php.net/manual/en/function.strlen.php#72274

5voto

mIFO Points 51

La fonction strlen() PHP renvoie le nombre de caractères ASCII.

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

strlen('boršc') -> 7 (octets)

 $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

.. ou vous pouvez utiliser une fonction comme celle-ci :

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

3voto

Ulver Points 867

Suite à la réponse de PhoneixS pour obtenir la longueur correcte de la chaîne en octets - Étant donné que mb_strlen() est plus lent que strlen() , pour de meilleures performances, vous pouvez vérifier le paramètre ini "mbstring.func_overload" afin que mb_strlen() n'est utilisé que lorsqu'il est vraiment nécessaire :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X