Json编码给我从Ajax null,但不是普通的php字符串

时间:2011-12-28 19:09:22

标签: php ajax json jquery

大家好,这是php中的字符串(对不起,如果很长)

$JsonSpecificheTitoli='{"titoli":{"TitoloEbay-1-Virtuemart":" Maglia Shirt Adidas Milan tg S M L Per sport d è numerico maniche corte Home ","TitoloEbay-2-EbayIT":" Maglia Shirt Adidas Milan tg M L Ibrahimovic Per sport d è numerico Home ","TitoloEbay-5-EbayIT":" Maglia Shirt Adidas Milan tg XL Per sport d è numerico maniche corte Home ","TitoloEbay-3-EbayDE":" Trikot Shirt Adidas Milan tg S M XL F�r Sport ist numerisch S/S Saison 09 10 ","TitoloEbay-6-EbayDE":" Trikot Shirt Adidas Milan tg L F�r Sport ist numerisch S/S Saison 09 10 Home ","TitoloEbay-4-EbayUK":" Jersey Shirt Adidas Milan tg L XL XXL For sports is numerically Kurze armel "},"specifiche":{"Virtuemart":{"":"Arrivo in 24/48 h con SDA oppure Possibilita di necessita di 4/5 giorni per la spedizione","Maniche":" maniche corte "},"EbayIT":{"":"Arrivo in 24/48 h con SDA oppure Possibilita di necessita di 4/5 giorni per la spedizione","Maniche":" maniche corte "},"EbayDE":{"":"Ankunft in 24/48 h M�glichkeit der SDA oder erfordert 4 / 5 Tage Versandkosten","Arme":" S/S "},"EbayUK":{"":"Arrival in 24/48 h Possibility of SDA or requires 4 / 5 days for shipping","Sleeves":" Kurze armel "}}}';

如果我直接使用php从这个字符串创建一个json_decode没问题:

$pr = json_decode($JsonSpecificheTitoli);  //-->OK

但如果我从REQUEST(从Ajax请求)获取它,它会给我null

$Tt = $_REQUEST['Titoli'];
$TtJ = json_decode ($Tt); // --> it says null

$v=json_last_error();  //--> gives me 5 , is Syntax error? 

奇怪的是,如果在REquest中复制和打印相同的字符串会如何变坏?

由于

2 个答案:

答案 0 :(得分:2)

  

$v=json_last_error();给我5,是语法错误吗?

您可以针对JSON_ERROR_SYNTAX echo JSON_ERROR_SYNTAX; # 4 echo JSON_ERROR_UTF8; # 5 进行检查,只需回显值:

$_REQUEST

所以在你的情况下,这是一个UTF8错误。 the error constants将UTF-8编码的字符串作为输入。只要确保它是UTF-8编码就可以了。

json_decode(和类似的输入变量)的编码取决于发送到您的应用程序的HTTP请求(输入)的编码,该请求通常取决于原始网站的编码/字符集。

没有办法可靠地检测它,所以你知道它会更好。但是,如果您需要检测它,json_decode­Docs函数会很有用。

获取PHP脚本的HTTP请求中使用的编码信息,然后在将其传递到$isUTF8 = preg_match('//u', $string); 之前根据需要重新编码。您可以借助mb_http_input­Docsiconv function­Docs在PHP中重新编码字符串。

此外,您还可以验证输入是否有效是否为有效的UTF-8字符串,如果没有,则拒绝接受对您的应用程序的无效请求。要检查字符串是否为UTF-8,可以在字符串上运行正则表达式:

{{1}}

(另见Multibyte String functions­Docs

答案 1 :(得分:1)

检查您的编码。 5 = JSON_ERROR_UTF8。

另外,你怎么知道它们是“同一串”?或者你只是假设?您是否打印出服务器接收服务器的内容,或者您​​只知道您发送的内容并期望它与收到的内容相同?