大家好,这是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中复制和打印相同的字符串会如何变坏?
由于
答案 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
Docs或iconv
functionDocs在PHP中重新编码字符串。
此外,您还可以验证输入是否有效是否为有效的UTF-8字符串,如果没有,则拒绝接受对您的应用程序的无效请求。要检查字符串是否为UTF-8,可以在字符串上运行正则表达式:
{{1}}
答案 1 :(得分:1)
检查您的编码。 5 = JSON_ERROR_UTF8。
另外,你怎么知道它们是“同一串”?或者你只是假设?您是否打印出服务器接收服务器的内容,或者您只知道您发送的内容并期望它与收到的内容相同?