【发布时间】:2012-12-06 20:32:53
【问题描述】:
这段代码
print mb_substr('éxxx', 0, 1);
打印一个空格:(
它应该打印第一个字符é。但是,这似乎可行:
print mb_substr('éxxx', 0, 2);
但是这样不对,因为 (0, 2) 表示 2 个字符...
【问题讨论】:
标签: php string utf-8 multibyte mbstring
这段代码
print mb_substr('éxxx', 0, 1);
打印一个空格:(
它应该打印第一个字符é。但是,这似乎可行:
print mb_substr('éxxx', 0, 2);
但是这样不对,因为 (0, 2) 表示 2 个字符...
【问题讨论】:
标签: php string utf-8 multibyte mbstring
尝试将编码参数传递给 mb_substr,如下所示:
print mb_substr('éxxx', 0, 1, 'utf-8');
永远不会自动检测到编码。
【讨论】:
mb_detect_encoding 来实际上尝试检测编码会更好吗?
mb_internal_encoding 而不是将 "utf-8" 传递给所有 mb_* 函数怎么样?就像 Álvaro G. Vicario 指出的那样
在实践中,我发现在某些系统中,多字节函数默认为 ISO-8859-1 进行内部编码。这实际上破坏了他们处理多字节文本的能力。
设置一个好的默认值可能会解决这个问题和其他一些问题:
mb_internal_encoding('UTF-8');
【讨论】: