在字节中测量string大小

我正在做一个门户的房地产饲料,它告诉我一个string的最大长度应该是20,000字节(20kb),但我从来没有遇到过这个。

我如何测量一个varchar string byte大小。 所以我可以做一个while循环来修剪它。

你必须弄清楚这个string是用ascii编码还是用多字节格式编码。

在前一种情况下,你可以使用strlen

在后一种情况下,您需要查找每个字符的字节数。

strlen文档给出了一个如何实现的例子: http : //www.php.net/manual/en/function.strlen.php#72274

您可以使用mb_strlen()使用只有字节字符的编码来获取字节长度 ,而不用担心多字节或单字节string。 例如,如drake127在mb_strlen的注释中所述,可以使用“8bit”编码:

 <?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查看更多关于它的信息;

要按字节长度修剪string而不在多字节字符中间分割,可以使用:

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

你的意思是字节大小还是string长度?

字节大小用strlen()测量,而string长度用mb_strlen()查询。 您可以使用substr()将string修剪为X 个字节 (注意,如果它具有多字节编码,就像Darhazer在注释中指出的那样),而mb_substr()将其修剪为X个字符string的编码。

PHP的strlen()函数返回ASCII字符的数量。

strlen('borsc') – > 5(字节)

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 

..或者你可以使用这样的function:

 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的答案获得正确的string长度以字节为单位 – 由于mb_strlen()strlen()慢,为了获得最佳性能,可以检查“mbstring.func_overload”ini设置,以便只有当mb_strlen()真的需要:

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