第一次接觸到前后端分離開(kāi)發(fā)吗垮,需要在后端接收前端ajax提交的json數(shù)據(jù)损离,開(kāi)發(fā)基于ThinkPHP3.2.3框架哼审。于是一開(kāi)始習(xí)慣性的直接用I()方法接收到前端發(fā)送的json數(shù)據(jù)碘耳,然后用json_decode()解析發(fā)現(xiàn)結(jié)果為空显设!但是打印出還未解析的值卻打印得出來(lái)。
后來(lái)在解決過(guò)程中發(fā)現(xiàn)原因是ThinkPHP的I()方法默認(rèn)使用的是htmlspecialchars()方法過(guò)濾辛辨,json字符串中的雙引號(hào)被轉(zhuǎn)換成了html實(shí)體(")捕捂,原來(lái)的json數(shù)據(jù)已經(jīng)不再是json格式了瑟枫。所以導(dǎo)致用json_decode()解析不出來(lái)數(shù)據(jù),但是直接打印卻可以打印指攒,因?yàn)闉g覽器會(huì)將(")解析為”而json_decode()不會(huì)慷妙。
代碼,輸出結(jié)果如下:
后面查清楚原因之后允悦,我找了字符串的其他解析方法膝擂,后面發(fā)現(xiàn)只要把I()方法的第二個(gè)參數(shù),也就是設(shè)置過(guò)濾字符串方法改為strip_tags(I($str, '', 'strip_tags'))隙弛,strip_tags函數(shù)使用來(lái)去除HTML標(biāo)簽的架馋,就可以解析。
代碼全闷,輸出結(jié)果如下:
不過(guò)還有一個(gè)方法是直接用$_POST['']接收叉寂,也可以解析。