我正在使用几乎最新版本的php(5.5.11),这里出现了问题。当我对字符串的一部分使用json_encode
时,它返回false。一开始我使用的是substr
,但后来我意识到使用这个函数处理非英文字符串是完全错误的。但即使我使用了mb_substr
,我仍然看到json_encode
返回false
:
$s = "に搭載されるようになると、その手軽さからJは急速に普及していく。、通信に関する標準を策定する国際団体インターナショナル";
$a = mb_substr($s, 0, 10);
如您所见,
var_dump( json_encode([
'd' => $a
]) );
返回
false
。var_dump( json_encode([
'd' => $s
]) );
返回正确的json。
当查看 json_last_error 时,我发现这是由于 Malformed UTF-8 characters, possibly incorrectly encoded
。因此问题是 mb_substr 给出了格式错误的字符。
当我查看 var_dump($a);
时,我看到它产生了 string(10) "に搭載�"
(我假设每个日语字符占3个字节,那个问号就是格式错误的字符)。
那么如何从字符串中获取子字符串,以便不会得到格式错误的字符串呢?
mb_internal_encoding
没有设置为 'utf-8'?正确设置内部编码难道不是更好的解决方案吗? - Darren Cook