php strlen 返回0,PHP strlen()或mb_strlen()返回意外结果

使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值