使用PHP,我试图确定诸如以下字符串的长度(字符数):
1
1.1
1.1.1
1.1.2
1.1.3
1.1.3.1
1.1.3.2
1.1.4
1.1.5
1.1.6
1.1.7
等等
使用mb_strlen()或strlen()测量这些字符串的长度时,结果为
------------------------------
value | mb_strlen() | strlen()
------------------------------
1 | 1 | 1
------------------------------
1.1 | 5 | 5
------------------------------
1.1.1 | 9 | 9
------------------------------
1.1.1.1 | 13 | 13
------------------------------
1.1.1.2 | 13 | 13
------------------------------
1.1.1.3 | 13 | 13
------------------------------
看来它在计数“.”作为3个字符?我想知道只是做一个小功能来补偿可预测的“错误计数”,但想知道为什么它要计算“”.以3个字符开头.
mb_language('uni');
mb_internal_encoding('UTF-8');
$str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
是什么赋予了?
编辑:
这些字符串是作为csv导入的一部分导入的.
这是代码:
$f = fopen("s2db.csv", "r");
while (($line = fgetcsv($f)) !== false) {
$colcount = 0;
foreach ($line as $cell) {
//lets get the lines into variables first
//there only five, so just count
switch ($colcount) {
case '0':
$item = $cell;
break;
case '1':
$itemtitle = htmlspecialchars($cell);
break;
case '2':
$itemsubject = htmlspecialchars($cell);
break;
case '3':
$itemnumber = htmlspecialchars($cell);
break;
case '4':
$itemqty = htmlspecialchars($cell);
break;
case '5':
$itemfilename = htmlspecialchars($cell);
break;
}
$colcount++;
}
$itemlen = strlen($item);
echo "Value = " . $item . " | strlen() Length = " . $itemlen . "| mb_strlen() = " . mb_strlen($item) . "";
}
?>
这是结果
Value = 1 | strlen() Length = 3| mb_strlen() = 3
Value = 1.1 | strlen() Length = 7| mb_strlen() = 7
Value = 1.1.1 | strlen() Length = 11| mb_strlen() = 11
Value = 1.1.1.1 | strlen() Length = 15| mb_strlen() = 15
Value = 1.1.1.2 | strlen() Length = 15| mb_strlen() = 15
Value = 1.1.1.3 | strlen() Length = 15| mb_strlen() = 15
Value = 1.1.1.3.1 | strlen() Length = 19| mb_strlen() = 19
Value = 1.1.1.3.2 | strlen() Length = 19| mb_strlen() = 19
Value = 1.1.1.3.3 | strlen() Length = 19| mb_strlen() = 19
Value = 1.1.1.4 | strlen() Length = 15| mb_strlen() = 15
解:
我之所以投票@ hek2mgl是因为他的hexdump帮助我确定我并不疯狂,而且确实在计算“”.如3,as shown here.
关于导入格式,我无能为力,因此我将添加代码以补偿:
谢谢大家的帮助!
解决方法:
我有:
$str = '1.1.1';
var_dump(mb_strlen($str, 'utf-8')); // 5
var_dump(strlen($str)); // 5
如预期的那样.似乎.在您的情况下,不是常规点,而是特殊的Unicode字符.请显示您输入数据的十六进制转储.您可以使用Hexdump(我为此类情况编写了程序包):
安装:
sudo pear channel-discover www.metashock.de/pear
sudo pear install metashock/Hexdump
用法:
require_once 'Hexdump.php';
hexdump('1.1.1');
看看幕后真正的人物是什么会很有趣.
标签:strlen,php
来源: https://codeday.me/bug/20191122/2059999.html