PHP mb_substr()无法正常工作?

Ale*_*lex 20 php string utf-8 multibyte mbstring

这段代码

print mb_substr('éxxx', 0, 1);

打印一个空的空间:(

它应该打印第一个字符,é.但这似乎有效:

print mb_substr('éxxx', 0, 2);

但这不对,因为(0,2)意味着2个字符......

pov*_*asp 47

尝试将encoding参数传递给mb_substr,如下所示:

print mb_substr('éxxx', 0, 1, 'utf-8');
Run Code Online (Sandbox Code Playgroud)

永远不会自动检测编码.

  • 编码是*永远不会*自动检测,它总是*默认*为某事. (4认同)
  • @AlvinWong No.*知道*你正在使用什么编码,没有别的办法. (4认同)
  • 好吧,那么[`mb_internal_encoding`](http://hk1.php.net/manual/en/function.mb-internal-encoding.php)怎么样,而不是将`"utf-8"`传递给所有`mb_*`功能?就像ÁlvaroG.Vicario指出的那样 (3认同)

Álv*_*lez 13

在实践中,我发现在某些系统中,多字节函数默认为ISO-8859-1用于内部编码.这实际上破坏了他们处理多字节文本的能力.

设置一个好的默认值可能会解决这个问题和其他一些问题:

mb_internal_encoding('UTF-8');
Run Code Online (Sandbox Code Playgroud)