【发布时间】:2011-01-06 00:15:48
【问题描述】:
我有一个将字符串截断为 41 个字节的 php 脚本。我在字符串上调用 strlen 来检查它的大小。但是,如果字符串具有“\r\n”组合,则该组合被视为一个字节。所以在我的例子中,PHP 认为它不是 42 字节,而是 41 字节。
substr 也将其截断为 42 而不是 41 个字节。
if (strlen($value) > 41)
{
$value = substr($value, 0, 41);
另一个奇怪的情况。我有大量数据正在通过这个函数。千弦。如果我使用更简单的测试数据集,则代码可以正常工作,将“\r\n”视为 2 个字节。
有什么想法吗? 谢谢。
【问题讨论】:
-
这是一个回车换行组合,而不是相反。
-
您能否提供您准备值的实际代码?即您的测试用例?
-
无法在 5.3.4 上重现,
strlen的 40 个字符的字符串 +\r\n按预期返回 42。你的 PHP 版本是多少? -
NetCoder - 版本为 5.2.9。但正如我所说,我并不总是看到这种行为,只有在数千个字符串长的特定数据集上。更简单的数据集显示了预期的行为。所以我不相信 5.3.4 会起作用。
-
披露您的平台和使用情况。如果您从 Windows 上的文件中读取数据,它将把
\r\n转换为\n,除非您在fopen上使用了b标志。因此,如果 42 字节的假设源于文件大小或fread长度,那么它不会在 strlen 上匹配。
标签: php