PHP-函数-mb_strlen函数由于版本问题导致中文字符截断问题

由于个版本之间的差别,本文使用在线php运行测试,5.4,5.5,5.6版本之间的差别

5.4 版本运行代码及运行结果

这里不知道是在线运行平台的原因还是版本确实不支持,这里的提示为没有找到相关的函数.但是官方明确表明,该函数在4.0.6版本中已经加入.如果各位感兴趣可以在本地使用5.4版本进行测试一下,如果提示不相同或者是可以运行,还望邮件提醒我一下.

代码
<?php
echo PHP_VERSION;
echo '</br>';
echo mb_strlen('测试一段文字','utf8');
?>
运行结果
5.4.43
PHP Fatal error: Call to undefined function mb_strlen() in /tmp/f3735731-fefa-4fbb-823e-268a0af5ceff/code on line 4

5.5 版本运行代码及运行结果

5.5这个版本测试中,会出现一个奇怪的现象.如果第二个参数不传递,会统计错误.但是官方的说明中,已经明确说出,encoding 参数为字符编码。如果省略,则使用内部字符编码。.但是在测试中,如果省略,会被当做英文字符进行统计.当然这个说法是相对于5.6版本来说的.

代码
<?php
echo PHP_VERSION;
echo '</br>';
echo mb_strlen('测试一段文字','utf8');
?>
运行结果
5.5.9-1ubuntu4
6

5.5不传传递编码格式参数的运行代码及运行结果

代码
<?php
echo PHP_VERSION;
echo '</br>';
echo mb_strlen('测试一段文字','utf8');
?>
运行结果
5.5.9-1ubuntu4
18

5.6版本运行代码及运行结果

5.6版本中运行,对于我个人理解,是一个比较正确可以接受的结果.

代码
<?php
echo PHP_VERSION;
echo '</br>';
echo mb_strlen('测试一段文字');
?>
运行结果
5.6.9-0+deb8u1
6

5.6传递编码格式参数的运行代码及运行结果

代码
<?php
echo PHP_VERSION;
echo '</br>';
echo mb_strlen('测试一段文字','utf8');
?>
运行结果
5.6.9-0+deb8u1
6
测试就到这里,另外我个人还测试了一下7.0版本的运行结果,与5.6版本运行结果是相同的.

转载于:https://my.oschina.net/meaoo/blog/847589

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C语言实现上述要求的代码: ```c #include <stdio.h> #include <string.h> int main() { char a[] = "MPSS.DE.3.1.1-00281.4-NETRANI_GENALL_PACK-1.30283.15"; char b[46]; int len; // 拷贝数组a的值到数组b中,并删除-NETRANI_GENALL_PACK部分 char* pos1 = strstr(a, "-NETRANI_GENALL_PACK"); if (pos1 != NULL) { char* pos2 = pos1 + strlen("-NETRANI_GENALL_PACK"); strcpy(b, a); memmove(pos1, pos2, strlen(pos2) + 1); } else { strcpy(b, a); } // 判断数组b的长度是否超过45个字节 len = strlen(b); if (len > 45) { b[45] = '\0'; } printf("数组a:%s\n", a); printf("数组b:%s,长度:%d\n", b, strlen(b)); return 0; } ``` 输出结果为: ``` 数组a:MPSS.DE.3.1.1-00281.4-NETRANI_GENALL_PACK-1.30283.15 数组b:MPSS.DE.3.1.1-00281.4,长度:17 ``` 解释一下代码的实现过程: 1. 首先定义了一个字符数组 `a` 并赋值为给定的字符串。 2. 定义一个字符数组 `b`,长度为46(因为后面会添加一个字符串结束符 `\0`)。 3. 使用 `strstr` 函数查找数组 `a` 中是否包含 `-NETRANI_GENALL_PACK` 子串,如果有,则使用 `memmove` 函数将该子串后面的部分覆盖到该子串的位置上,实现删除该子串的效果;否则直接将数组 `a` 的值拷贝到数组 `b` 中。 4. 使用 `strlen` 函数获取数组 `b` 的长度,如果超过45个字节,则将第46个字符设为字符串结束符 `\0`。 5. 输出数组 `a` 和数组 `b` 的值以及数组 `b` 的长度。 需要注意的是,这里使用了 `strstr` 函数、`memmove` 函数和 `strlen` 函数,需要引入头文件 `string.h`。同时,为了便于输出结果,使用了 `printf` 函数,需要引入头文件 `stdio.h`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值