计算PHP字符串的大小(以字节为单位)
我在php.net网站上的用户评论中找到了该功能,非常方便strlen()。它接受ASCII或UTF-8格式的字符串,并找出该字符串的长度(以字节为单位)。
该函数通过遍历字符串并添加每个字符代表多少字节来工作。对于普通的ASCII值,这是一个字节,因此将1加到总数中。Unicode字符最多可以包含6个字节,因此该函数的其余部分通过使用AND计算得出该字符占用了多少个字节。
/*** Count the number of bytes of a given string.
* Input string is expected to be ASCII or UTF-8 encoded.
* Warning: the function doesn't return the number of chars
* in the string, but the number of bytes.
* See http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
* for information on UTF-8.
*
* @param string $str The string to compute number of bytes
*
* @return The length in bytes of the given string.
*/
function strBytes($str){
// 字符串应采用ASCII或UTF-8格式
// 字符串中的字符数
$strlen_var = strlen($str);
// 字符串字节计数器
$d = 0;
/*
* Iterate over every character in the string,
* escaping with a slash or encoding to UTF-8 where necessary
*/
for($c = 0; $c < $strlen_var; ++$c){
$ord_var_c = ord($str{$c});
switch(true){
case(($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
// 字符U-00000000-U-0000007F(与ASCII相同)
$d++;
break;
case(($ord_var_c & 0xE0) == 0xC0):
// 字符U-00000080-U-000007FF,掩码110XXXXX
$d+=2;
break;
case(($ord_var_c & 0xF0) == 0xE0):
// 字符U-00000800-U-0000FFFF,掩码1110XXXX
$d+=3;
break;
case(($ord_var_c & 0xF8) == 0xF0):
// 字符U-00010000-U-001FFFFF,掩码11110XXX
$d+=4;
break;
case(($ord_var_c & 0xFC) == 0xF8):
// 字符U-00200000-U-03FFFFFF,掩码111110XX
$d+=5;
break;
case(($ord_var_c & 0xFE) == 0xFC):
// 字符U-04000000-U-7FFFFFFF,掩码1111110X
$d+=6;
break;
default:
$d++;
};
};
return $d;
}
如果您想知道一个字符串有多大(以字节为单位),但对字符串的显示方式只有很少的控制,则此字符串很有用。例如,如果您下载一个网页并想知道它的大小(以字节为单位),则可以将页面的内容传递给此函数。
您可能认为可以在此处使用Content-Length标头,但是您不能依赖此标头从每个站点返回。有些网站会简单地省略该行,而其他网站只会在其中添加默认金额。
以上是 计算PHP字符串的大小(以字节为单位) 的全部内容, 来源链接: utcz.com/z/347629.html