我正在为一个门户做一个房地产提要,它告诉我一个字符串的最大长度应该是 20,000 字节(20kb),但我以前从未遇到过这个。
如何测量byte
. varchar string
所以我可以做一个while循环来修剪它。
我正在为一个门户做一个房地产提要,它告诉我一个字符串的最大长度应该是 20,000 字节(20kb),但我以前从未遇到过这个。
如何测量byte
. varchar string
所以我可以做一个while循环来修剪它。
您可以使用 mb_strlen()使用只有字节字符的编码来获取字节长度,而无需担心多字节或单字节字符串。例如,正如 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中查看更多信息
要按字节长度修剪字符串而不在多字节字符中间分割,您可以使用:
mb_strcut(string $str, int $start [, int $length [, string $encoding ]] )
您必须弄清楚字符串是用 ascii 编码还是用多字节格式编码。
在前一种情况下,您可以只使用strlen
.
在后一种情况下,您需要找到每个字符的字节数。
strlen 文档提供了一个示例:http ://www.php.net/manual/en/function.strlen.php#72274
你的意思是字节大小还是字符串长度?
字节大小用 来衡量strlen()
,而字符串长度用 来查询mb_strlen()
。您可以使用substr()
将字符串修剪为 X字节(请注意,如果字符串具有多字节编码,这将破坏字符串 - 正如 Darhazer 在评论中指出的那样)并将mb_substr()
其修剪为字符串编码中的 X 个字符。
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);
进一步PhoneixS回答以字节为单位获得正确的字符串长度 - 由于mb_strlen()
比 慢strlen()
,为了获得最佳性能,可以检查“mbstring.func_overload” ini设置,以便mb_strlen()
仅在真正需要时使用:
$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);