我从mb_substr()得到了非常奇怪的结果,这些结果与文档描述的预期行为相反:当我传入最后两个参数时,mb_substr()返回一个空字符串。如果完全忽略了最后两个参数,它将返回预期的结果。编辑:我想知道这是否可能是由于服务器设置造成的,因为当我使用MAMP在本地服务器上运行代码时,这种情况并没有发生。
Documentation:
str应该返回由start和length参数指定的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:我是一个字符串
发布于 2014-09-22 18:29:27
一切都取决于您使用的PHP版本。我刚刚在本地主机上测试了它,更改了PHP版本。
关于下列代码:
<?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中工作),可以使用:
<?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,因此从这个版本来看,它应该可以正常工作。
发布于 2014-09-22 18:20:44
这是正确的使用方法。正如它在评论s中所说的那样,传递为NULL使它被解释为0。
$mb2 = mb_substr('Hello I am a string',6,mb_strlen('Hello I am a string'),'utf-8');http://ideone.com/wYPYWM
https://stackoverflow.com/questions/25980606
复制相似问题