在字节中测量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);