成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JS+PHP+MYSQL處理JSON的全面總結(jié)

騫諱護 / 1438人閱讀

摘要:結(jié)論把存入數(shù)據(jù)庫前必須做次處理中文處理包含中文的字符串時,會將中文字符轉(zhuǎn)換為的形式,而且通過是不能恢復(fù)的。處理特殊字符通過解決中文問題會帶來新問題,的特殊字符處理。

開發(fā)過程中經(jīng)常碰到要把前端的json格式的數(shù)據(jù)傳遞到后端php,php做一些業(yè)務(wù)處理后把數(shù)據(jù)存到mysql,然后,php再從mysql中取出數(shù)據(jù)返回到前端。雖然這是一個再基礎(chǔ)不過的處理過程,但還是有不少問題需要認真研究。下面從幾個環(huán)節(jié)看看可能出現(xiàn)的各種問題。

存入mysql前

假設(shè)前端傳入的數(shù)據(jù)是:

{"html":"a"b"}

json_decode后,PHP對象是:

object(stdClass)#3 (1) {
  ["html"]=>
  string(3) "a"b"
}

注意要處理的數(shù)據(jù)中包含了雙引號,這個字符在json中需要轉(zhuǎn)意,在mysql中也需要轉(zhuǎn)意。假如要把這個對象轉(zhuǎn)換為json串存入mysql,先用json_encode處理:

{"html":"a"b"}

注意:雙引號前面加上了反斜杠。再用real_escape_string處理:

{"html":"a"b"}

注意:所有的雙引號和反斜杠(json_encode加上的那個)都加上了反斜杠。存入數(shù)據(jù)庫的內(nèi)容:

{"html":"a"b"}

按照這樣的過程處理數(shù)據(jù)是正常的,從數(shù)據(jù)庫取出后,用json_decode可以恢復(fù)原來的數(shù)據(jù)。但是如果在存入數(shù)據(jù)庫前沒有做real_escape_string的處理,直接存入數(shù)據(jù)庫,那么數(shù)據(jù)庫的內(nèi)容:

{"html":"a"b"}

注意:這時a和b之間的雙引號前面的反斜杠被mysql去掉了,數(shù)據(jù)庫中的內(nèi)容已經(jīng)不是合法的json串。

結(jié)論1:把json存入mysql數(shù)據(jù)庫前必須做1次real_escape_string

處理中文

json_encode處理包含中文的字符串時,會將中文字符轉(zhuǎn)換為unicode的形式(uXXXX),而且通過json_decode是不能恢復(fù)的。例如處理前的對象是:

object(stdClass)#3 (1) {
  ["html"]=>
  string(6) "你好"
}

json_encode后的json串是:

{"html":"u4f60u597d"}

real_escape_string處理后存入mysql數(shù)據(jù)庫:

{"html":"u4f60u597d"}

這樣帶來的問題是在mysql中就無法直接對這個串做處理,例如:

like "%你%"

解決這個問題的方法是,在進行json_encode前先對要處理的對象的值用urlencode處理一遍,json_encode后再用urldecode恢復(fù)回來,這樣的到j(luò)son串是:

{"html":"你好"}

結(jié)論2:通過urlencode解決json_encode將中文字符編碼為unicode的形式。

處理特殊字符

通過urlencode解決中文問題會帶來新問題,json的特殊字符處理。例如:雙引號會被編碼為“%22”,json_encode不會對%22特殊處理,【你"好】本應(yīng)該編碼為【你"好】,對雙引號進行轉(zhuǎn)義,但是結(jié)果是【你"好】,已經(jīng)不是一個合法的json字符串。

解決這個問題前首先要搞清楚json中有哪些特殊字符,看下圖:

來自:http://www.json.org/

解決這個問題的思路是在進行urlencode之前,先在這些特殊字符前加上反斜杠,這樣urldecode之后就有了轉(zhuǎn)義的反斜杠。

$str = str_replace(array("", """, "
", "
", "	"), array("", """, "
", "
", "	"), $str);

執(zhí)行這個操作時要注意,必須先替換反斜杠,再替換其它特殊字符,否則,給特殊字符添加的反斜杠又會被再加上反斜杠。另一個問題注意要用雙引號,php中單引號的內(nèi)容不會轉(zhuǎn)義,雙引號才會。

總結(jié):通過上述3個方面的處理,應(yīng)該可以正確的處理json的問題了。但是,也許應(yīng)該直接寫一個拼接json串的方法,徹底不用json_encode,這樣效率更高些,以后有機會試試。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/22125.html

相關(guān)文章

  • JS+PHP+MYSQL處理JSON全面總結(jié)

    摘要:結(jié)論把存入數(shù)據(jù)庫前必須做次處理中文處理包含中文的字符串時,會將中文字符轉(zhuǎn)換為的形式,而且通過是不能恢復(fù)的。處理特殊字符通過解決中文問題會帶來新問題,的特殊字符處理。 開發(fā)過程中經(jīng)常碰到要把前端的json格式的數(shù)據(jù)傳遞到后端php,php做一些業(yè)務(wù)處理后把數(shù)據(jù)存到mysql,然后,php再從mysql中取出數(shù)據(jù)返回到前端。雖然這是一個再基礎(chǔ)不過的處理過程,但還是有不少問題需要認真研究。下...

    anRui 評論0 收藏0
  • PHP超時處理全面總結(jié)

    摘要:的毫秒級超時也有問題。。中超時實現(xiàn)一初級最簡單的超時實現(xiàn)秒級超時思路很簡單鏈接一個后端,然后設(shè)置為非阻塞模式,如果沒有連接上就一直循環(huán),判斷當前時間和超時時間之間的差異。實際處理這個調(diào)用的部件在完成后,通過狀態(tài)通知和回調(diào)來通知調(diào)用者。 概述 在PHP開發(fā)中工作里非常多使用到超時處理到超時的場合,我說幾個場景: 異步獲取數(shù)據(jù)如果某個后端數(shù)據(jù)源獲取不成功則跳過,不影響整個頁面展現(xiàn) 為了保...

    I_Am 評論0 收藏0
  • 后端知識點總結(jié)——NODE.JS基礎(chǔ)

    摘要:后端知識點總結(jié)基礎(chǔ)不是是一種軟件開發(fā)平臺,它的競爭對象歷史第一次有一種語言可以通吃前后端網(wǎng)站阿里云鏡像版本年初年中年底最新版本功能強大可靠,適合大型企業(yè)級項目簡單易用適合互聯(lián)網(wǎng)項目易用適合平臺性能好適合服務(wù)器端密集型項目不適合密集型項目密集 后端知識點總結(jié)——NODE.JS基礎(chǔ) 1.Node.js Node.js不是JS,是一種軟件開發(fā)平臺,它的競爭對象JSP/PHP/ASP.NET...

    Freeman 評論0 收藏0
  • php之道》讀后總結(jié) php學習綱要

    摘要:日期和時間使用類完成讀取設(shè)置比較和計算日期與時間。單元測試單元測試是從編寫開始,貫穿于整個開發(fā)周期的一種用于保證函數(shù)類和方法的行為與預(yù)期一致的編程方法。是應(yīng)用的單元測試框架的業(yè)界標準,其他幾個可選框架是行為驅(qū)動開發(fā)行為驅(qū)動開發(fā)有兩種方式和。 《php之道》閱讀地址:http://wulijun.github.io/php-the-right-way/#code_style_guide ...

    gitmilk 評論0 收藏0
  • JavaScript 進階知識 - Ajax篇

    摘要:注意事項以下版本要設(shè)置默認編碼,,否則程序可能無法正確顯示中文。組成部分協(xié)議是對請求和響應(yīng)的報文內(nèi)容進行了約束和規(guī)范。請求報文請求是由客戶端發(fā)起,其規(guī)范格式為請求行請求頭請求主體。 showImg(https://segmentfault.com/img/remote/1460000013696283?w=1920&h=1080); Ajax 前言 前面我們已經(jīng)學習了js基礎(chǔ)知識和一些...

    Dongjie_Liu 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<