使用substr()
,您可以省略第三个参数来获取字符串的其余部分:
substr('abcdefg', 2) // returns "cdefg"
您不能对mb_substr()
:
mb_substr('abcdefg', 2, null, 'UTF-8'); // returns empty string
我只发现了奇怪而丑陋的解决方案。
设置一个非常高的数字作为长度:
$a = mb_substr('abcdefg', 2, 9999999999, 'UTF-8');
计算数字:
$a = mb_substr('abcdefg', 2, mb_strlen('abcdefg', 'UTF-8') - 2, 'UTF-8');
使用mb_internal_encoding()
:
$temp = mb_internal_encoding(); // prevent action at a distance
mb_internal_encoding('UTF-8');
$a = mb_substr('abcdefg', 2);
mb_internal_encoding($temp);
没有真正的解决方案吗?
答案 0 :(得分:2)
更改日志将此显示为版本5.4.8(2012年10月18日)中的错误修复。
http://us.php.net/ChangeLog-5.php
允许将null作为默认值传递给mb_substr()和mb_strcut()。 Alexander Moskaliov通过GitHub PR#133补丁。
以下是拉取请求线程的链接:https://github.com/php/php-src/pull/133
答案 1 :(得分:2)
这是PHP 5.3(可能还有早期版本)和PHP 5.4之间的区别。
实际上,如果你很好奇,你可以在PHP的源代码中看到问题。
文件ext/mbstring/mbstring.c
在PHP_FUNCTION(mb_substr)
函数中有以下区别。
在 PHP 5.3 中,他们会检查这种情况:
if (argc < 3) {
len = str_len;
}
然而在 PHP 5.4 中,他们使用:
if (argc < 3 || Z_TYPE_PP(z_len) == IS_NULL) {
len = str_len;
}
您可以在mb_string
函数的实现中找到这些定义,该函数由PHP_FUNCTION(mb_substr)
在上述文件中启动。源代码可以从php.net download page下载。