首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mb_substr()返回一个空字符串,除非省略最后两个参数

mb_substr()返回一个空字符串,除非省略最后两个参数
EN

Stack Overflow用户
提问于 2014-09-22 18:15:27
回答 2查看 961关注 0票数 0

我从mb_substr()得到了非常奇怪的结果,这些结果与文档描述的预期行为相反:当我传入最后两个参数时,mb_substr()返回一个空字符串。如果完全忽略了最后两个参数,它将返回预期的结果。编辑:我想知道这是否可能是由于服务器设置造成的,因为当我使用MAMP在本地服务器上运行代码时,这种情况并没有发生。

Documentation:

str应该返回由startlength参数指定的mb_substr ( string $str, int $start, int $length, string $encoding )部分。

length从str中使用的最大字符数。(如果省略或空),将所有字符提取到字符串.的末尾。

php.net视图

我的代码:

$mb2 = mb_substr('Hello I am a string', 6, NULL, 'UTF-8'); echo 'mb2: ' . $mb2;

预期行为:

mb2:我是一个字符串

实际结果:

mb2:

我修改的代码:

$mb2 = mb_substr('Hello I am a string', 6); echo 'mb2: ' . $mb2;

实际结果:

mb2:我是一个字符串

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 18:29:27

一切都取决于您使用的PHP版本。我刚刚在本地主机上测试了它,更改了PHP版本。

关于下列代码:

代码语言:javascript
复制
<?php

$mb2 = mb_substr('Hello I am a string', 6, NULL, 'UTF-8');
echo 'mb2: ' . $mb2;

PHP 5.6输出:mb2: I am a string

PHP 5.5.11输出:mb2: I am a string

PHP 5.4.31输出:mb2: I am a string

PHP 5.3.29输出:mb2:

因此,在以前的PHP版本中似乎有一个bug,或者PHP文档已经更改,而更早的时候,还有另一个PHP文档。

要创建安全代码(也可以在PHP5.3中工作),可以使用:

代码语言:javascript
复制
<?php
mb_internal_encoding('UTF-8');
$mb2 = mb_substr('Hello I am a string', 6);
echo 'mb2: ' . $mb2;

这将在所有PHP 5.3+版本中提供相同的结果。

编辑

查看PHP变更量g,您可以看到:

允许将null作为默认值传递给mb_substr()和mb_strcut()。作者通过GitHub PR #133.

5.4.8,因此从这个版本来看,它应该可以正常工作。

票数 2
EN

Stack Overflow用户

发布于 2014-09-22 18:20:44

这是正确的使用方法。正如它在评论s中所说的那样,传递为NULL使它被解释为0。

代码语言:javascript
复制
$mb2 = mb_substr('Hello I am a string',6,mb_strlen('Hello I am a string'),'utf-8');

http://ideone.com/wYPYWM

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25980606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档