计算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

回到顶部