2010-08-04 94 views
3

所有,Json_encode,json_decode和UTF8

我做一个JSON请求到Web服务器,使用PHP,并将其返回我在一个变量的JSON响应。 JSON响应将包含许多键和值。我从服务器获得的JSON响应中有特殊字符。因此,我使用以下语句将其转换为UTF8,解码JSON并将其用作数组以显示给UI。

$response = json_decode(utf8_encode($jsonresponse)); 

现在,我必须在JSON请求中将相同的值传递给服务器以完成某些操作。但是,当我通过

$jsonrequest = json_encode(utf8_encode($request)); 

到服务器,它失败。

以下代码成功读取特殊字符并将其显示到UI。但如果我必须将utf8_encode值传递给服务器,则会失败。

目前整个往返代码是根据:

$requestdata = json_encode($request); 
$jsonresponse = //Do something to get from server; 
$response = json_decode(utf8_encode($jsonresponse)); 

如何修改它,这样我通过精确值,以什么我从服务器的JSON响应receieved?

+0

最近我有这个问题,原来我用成为一个狗屎编码器,并在几年前在一段代码中使用require_once作为一个愚蠢的理由。良好的3小时调试。 :) – Jek 2017-10-08 12:25:39

+0

@Jek require_once与编码有什么关系? – Borna 2017-11-14 14:26:06

+0

@博尔纳我不知道为什么,但它解决了我的问题。我花了数小时缩小了我的代码库中编码问题在JSON之前打印出来的位置,并缩小到在类的公共函数中调用require_once。蠢事。 – Jek 2017-11-14 20:06:54

回答

1

你试过切换功能的地方吗?

​​

函数utf8_encode唯一编码字符串不是数组

+0

仍然无法正常工作......但至少php错误消失 – Jake 2010-08-04 18:45:51

+0

json_encode仅适用于utf-8字符串,因此如果$ request中有非utf-8字符串,则会失败。 (如果没有,将它包装在utf8_encode中是毫无意义的。) – 2014-07-01 09:41:26

0

我也同时使用ZF和UTF-8编码字符串在AJAX调用和我认为uft8_encode和utf8_decode功能应该是过时的。

你有一个有效的meta标签

<元HTTP的当量= “Content-Type的” 内容= “text/html的;字符集= UTF-8”/ >

和有效的doctype

< DOCTYPE HTML PUBLIC “ - // W3C // DTD HTML 4.01 // EN” “http://www.w3.org/TR/html4/strict.dtd” >

1

您将初始请求转换为UTF-8,因此我认为它是其他内容。但是当您发回数据时,您不会将其转换回原始编码。

你确定发送服务器预期的编码数据吗?

6

我从服务器得到的JSON响应中有特殊字符。因此,我使用以下语句将其转换为UTF8,解码JSON并将其用作数组以显示给UI。

JSON数据已经以UTF-8编码。您不应该再次将其转换为UTF-8;你会破坏数据。

取而代之的是:

$response = json_decode(utf8_encode($jsonresponse)); 

你应该有这样的:

$response = json_decode($jsonresponse); //already UTF-8! 
+0

+1,另外,utf8_decode和utf8_encode应该使用_never_,因为在实践中,你从不处理ISO-8859-1编码,即使你需要在UTF-8和UTF-8之间进行转换,您可以改用iconv或mb_convert_encoding。人们好奇如何在PHP中正确地做unicode应该看看这些幻灯片:http://www.slideshare.net/auroraeosrose/using-unicode-with-php-30427880 – 2014-01-29 09:44:20

+0

(Windows记事本问题)请咨询此,我分享这个问题也解决了它:http://stackoverflow.com/questions/10290849/how-to-remove-multiple-utf-8-bom-sequences-before-doctype – 2014-09-19 14:55:54

3

设置该到PHP连接:

$sql = “SET NAMES ‘utf8′”; 
mysql_query($sql, $link);