我使用的是几乎最新版本的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个字节,而且该问号是格式错误的字符。)
那么如何以这种方式从字符串中获取子字符串,以至于我不会得到格式错误的字符串?
答案 0 :(得分:6)
只需将utf-8
编码作为mb_substr()
的第四个参数传递,您就可以了。
$a = mb_substr($s, 0, 10,'utf-8');
echo $a; // に搭載されるようにな
echo json_encode($a); // "\u306b\u642d\u8f09\u3055\u308c\u308b\u3088\u3046\u306b\u306a"