php json_encode utf8 char问题(mysql)

15 php mysql json utf-8

我正在使用jQuery的表单中的数据形式写入数据库json_encode.

但是,来自数据库的数据将会损坏.

$db->query("SET NAMES utf8");

$kelime = array("Merhaba","Dünya");
$bilgi = json_encode($kelime);

$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '".$bilgi."'
";
$db->query($incelemeEkle);
Run Code Online (Sandbox Code Playgroud)

数据库表模式;

CREATE TABLE `incelemeRapor` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `bigData` text COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

MySQL插入示例数据;

["Merhaba","Du00fcnya"]
Run Code Online (Sandbox Code Playgroud)

Arn*_*anc 26

在将数据放入SQL查询之前始终转义数据:

$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '".mysql_real_escape_string($bilgi)."'
";
Run Code Online (Sandbox Code Playgroud)

(加mysql_real_escape_string()电话)

json_encode()使用\u<code-point>符号编码非ascii字符; 所以json_encode(array("Merhaba","Dünya"));回归["Merhaba","D\u00fcnya"].

然后,此字符串嵌入在SQL查询中:

INSERT INTO incelemeRapor SET
bigData = '["Merhaba","D\u00fcnya"]'
Run Code Online (Sandbox Code Playgroud)

转义序列没有特殊含义\u,所以MySQL只删除了\; 这导致["Merhaba","Du00fcnya"]存储在数据库中.

因此,如果您转义字符串,查询将变为:

$incelemeEkle = "
INSERT INTO incelemeRapor SET
bigData = '["Merhaba","D\\u00fcnya"]'
";
Run Code Online (Sandbox Code Playgroud)

["Merhaba","D\u00fcnya"]存储在数据库中.