【发布时间】:2011-03-31 11:30:48
【问题描述】:
如何从 php 中的字符串中获取“文件大小”?
我将字符串作为 blob 放入 mysql 数据库中,我需要存储 blob 的大小。我的解决方案是创建一个临时文件并将字符串放入临时文件中。现在我可以从“字符串”中获取文件大小。但那个解决方案并不好......
问候
【问题讨论】:
如何从 php 中的字符串中获取“文件大小”?
我将字符串作为 blob 放入 mysql 数据库中,我需要存储 blob 的大小。我的解决方案是创建一个临时文件并将字符串放入临时文件中。现在我可以从“字符串”中获取文件大小。但那个解决方案并不好......
问候
【问题讨论】:
这取决于。如果您启用了mbstring function overloading,则唯一有效的调用将是mb_strlen($string, '8bit');。如果未启用,strlen($string) 也可以正常工作。
所以,你可以像这样处理这两种情况:
if (function_exists('mb_strlen')) {
$size = mb_strlen($string, '8bit');
} else {
$size = strlen($string);
}
【讨论】:
strlen() 总是有效时,为什么还要使用mb_strlen()?请参阅下面的答案。
mb_string.overload 打开,strlen() 将返回 UTF-8 字符数,而不是字节数。所以不,这是必需的......
从表中选择长度(字段)
来自MySQL docs:
长度(字符串)
返回字符串str的长度, 以字节为单位。一个多字节 字符计为多个字节。 这意味着对于一个字符串 包含五个两字节字符, LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。
【讨论】:
strlen()
在将其放入 mysql 或 SQL 之前:
LENGTH()
请注意,长度可能因字符集而异。如果你想以字节为单位的实际长度使用 strlen(),如果你想有字符计数使用 mb_strlen()(例如,如果你有 utf-8 编码)
【讨论】:
如果您存储的只是字符串,那么大小应该是字符串的长度乘以字符集中的字节数。所以对于 Unicode 来说就是 2*strlen($string)。
【讨论】:
strlen($string) 是查看字符串大小(MB)的最佳示例
strlen() 实际上返回的不是字符串中的元素个数,而是其中的字节数
示例:
echo(strlen('a■')); 将返回 4,因为黑色方块字符由 3 个字节组成,而“a”字符由 1 个字节组成。
【讨论】:
使用mb_strlen() 这样你就可以告诉它字符串使用什么类型的编码(如果有的话)来获取它的字节大小。
【讨论】:
mb_strlen() 与多字节编码相结合,旨在以字符 而不是字节为单位返回字符串的大小。 -1
mb_strlen 计算当前字符集的字符串中的字符数。它返回字节数的唯一方法是将字符集强制为每字符 1 个字节的字符集。而且由于某些字符在大多数 1 字节字符集中无效,8-bit 是唯一始终返回正确字节长度的字符集...