日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP串行化與JSON

瀏覽:215日期:2024-01-14 13:11:50

原文連接:http://hi.baidu.com/lostdays/blog/item/8d76c300ec4e3c15738b65fa.html

總目錄

What 、Why、How

What; Why; How

PHP串行化語(yǔ)法; PHP串行化實(shí)例; 在JavaScript中串行化為JSON—使用json2.js; 在JavaScript中串行化為JSON—使用prototype.js

PHP與JSON

json_decode函數(shù); json_encode函數(shù); json_decode函數(shù)實(shí)例; json_encode函數(shù)實(shí)例

實(shí)踐出真知

背景說(shuō)明; 前臺(tái)JavaScript部分; 后臺(tái)PHP部分

What 、Why、How

What

Ok,各位親愛(ài)的朋友,讓我們開(kāi)始這個(gè)新概念的旅程,串行化這個(gè)話題可能大家以前都沒(méi)有多加關(guān)注,事情其實(shí)起源于那天我隨便翻翻PHP手冊(cè),發(fā)現(xiàn)這個(gè)串行化的函數(shù),之后閑來(lái)無(wú)聊又做一個(gè)WordPress的插件,這個(gè)時(shí)候順便用了一下串行化,發(fā)現(xiàn)在某些場(chǎng)合的確非常方便。

先來(lái)解釋下串行化:簡(jiǎn)單來(lái)說(shuō),串行化即將變量轉(zhuǎn)換成字節(jié)流的過(guò)程。串行化的提出,有效的解決了對(duì)象的保存和傳輸?shù)膯?wèn)題,舉例來(lái)說(shuō),我在JavaScript 中建立了一個(gè)對(duì)象,我現(xiàn)在想將這個(gè)對(duì)象保存到服務(wù)器端的數(shù)據(jù)庫(kù)中,那么我如何進(jìn)行操作呢,這個(gè)時(shí)候往往就用到了對(duì)象的串行化。在JavaScript的串行化中不得不提JSON,JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。

人們通常將JSON和XML進(jìn)行比較,二者都是將對(duì)象扁平化(稍后我們解釋這個(gè)“扁平化”)的一種手段,XML的特點(diǎn)是結(jié)構(gòu)嚴(yán)謹(jǐn),而JSON的特點(diǎn)則是簡(jiǎn)單易讀、容易使用程序進(jìn)行分析,因?yàn)樗軌蚝芎?jiǎn)單的將一個(gè)對(duì)象轉(zhuǎn)換為一個(gè)字符流的形式,例如如下代碼:

代碼:

{'type':'human','name':'hanguofeng','age':22}

則是一個(gè)JSON表達(dá)式,他保存了一個(gè)對(duì)象,我們?nèi)绾螌⑺謴?fù)為對(duì)象呢?很簡(jiǎn)單,如下:

代碼:

var animal_str = '{'type':'human','name':'hanguofeng','age':22}';var animal2=eval('(' + animal_str + ')');

我們通過(guò)JavaScript的求值函數(shù),將JSON表達(dá)式進(jìn)行運(yùn)算,并返回值,用以獲得一個(gè)對(duì)象,到這里,我想你一定會(huì)和我一樣,對(duì)JSON格式的創(chuàng)造者的思維佩服不已吧。本來(lái)說(shuō)講串行化的,“不小心”談到JSON,并且講了這么多,呵呵,跑題了嗎?沒(méi)有,PHP的串行化和JSON是非常像的,一個(gè)PHP的串行化表達(dá)式如下:

代碼:a:3:{s:4:'type';s:5:'human';s:4:'name';s:10:'hanguofeng';s:3:'age';s:2:'20';}他看起來(lái)結(jié)構(gòu)和JSON有些類似,實(shí)際上,這個(gè)表達(dá)式是如下數(shù)組的串行化結(jié)果:代碼:$animal =array('type' => 'human','name' => 'hanguofeng','age'=> '20');OK,上面的一些介紹只是讓你大致看到串行化和JSON是什么樣的東西,你無(wú)須對(duì)這里的代碼過(guò)分糾結(jié),我們?cè)诤竺鏁?huì)詳細(xì)講解的,下面我們來(lái)談?wù)劄槭裁匆褂么谢?/P>

Why

串行化首先是作為數(shù)據(jù)傳輸?shù)姆奖愣霈F(xiàn)的,正如本文開(kāi)始我提出的問(wèn)題,我在JavaScript中建立了一個(gè)對(duì)象,我現(xiàn)在想將這個(gè)對(duì)象保存到服務(wù)器端的數(shù)據(jù)庫(kù)中,應(yīng)該如何做,這其實(shí)上是一個(gè)“我如何將一個(gè)對(duì)象從瀏覽器提交到服務(wù)器”的問(wèn)題,在這個(gè)傳輸過(guò)程中,我們知道,實(shí)際上只能夠傳遞字符流,字符流是一維(扁平)的,然而很多對(duì)象卻是多維的,如果要傳遞的對(duì)象是一個(gè)字符串,那么很簡(jiǎn)單,我們直接將其作為傳遞的內(nèi)容就可以了,如果要傳遞的對(duì)象是一個(gè)數(shù)組或者其他的結(jié)構(gòu)呢,我們就需要用字符流來(lái)描述他,就比如在電話里面,我問(wèn)你的名字是什么,你會(huì)告訴我,你的名字是張三、李四,而我問(wèn)你,你的長(zhǎng)相如何呢,你就需要用文字向我描述了,我們進(jìn)行數(shù)據(jù)傳遞的媒介往往和這條電話線路一樣,只能傳遞字符流,而我們描述對(duì)象的過(guò)程,實(shí)際上就是串行化的過(guò)程。

另外,串行化也可以用于對(duì)對(duì)象的持久化存儲(chǔ),也許你曾經(jīng)也和我一樣,想著在數(shù)據(jù)庫(kù)的某一個(gè)字段中存儲(chǔ)一個(gè)對(duì)象,現(xiàn)在我們可以非常簡(jiǎn)單的做到這一點(diǎn),并且,你的這個(gè)數(shù)據(jù)庫(kù)字段不需要設(shè)定為特殊格式,設(shè)定為 varchar就可以了(當(dāng)然,如果對(duì)象很大,你可能需要設(shè)定為text)。

How

PHP串行化語(yǔ)法

好了,我想What和Why的問(wèn)題你都了解了,本節(jié)最后我們來(lái)講點(diǎn)理論性強(qiáng)一些的內(nèi)容,就是如何使用PHP串行化和反串行化數(shù)據(jù),如何將JavaScript對(duì)象串行化(即變?yōu)镴SON格式)和如何將其反串行化,最后則是如何將JSON和PHP的串行化建立關(guān)系。

PHP為我們提供了兩個(gè)函數(shù),用來(lái)進(jìn)行串行化和反串行化的操作,這兩個(gè)函數(shù)分別是:serialize()和unserialize(),他們適用于PHP4和PHP5,下面分別進(jìn)行講解:

serialize()

(PHP 4, PHP 5, PECL axis2:0.1.0-0.1.1)serialize — 獲得一個(gè)可存儲(chǔ)的表述值

說(shuō)明

string serialize ( mixed $value )獲得一個(gè)可存儲(chǔ)的表述值本函數(shù)用于無(wú)損的存儲(chǔ)或者傳遞PHP變量值和結(jié)構(gòu)。如果需要將已經(jīng)串行化的值轉(zhuǎn)回PHP變量,可以使用unserialize()函數(shù)。

參數(shù)

value即被串行化的表達(dá)式。serialize()處理除資源指針之外的所有類型,你甚至可以將含有指向自身元素的數(shù)組串行化。你串行化的含有循環(huán)指向的數(shù)組或者對(duì)象一樣會(huì)被存儲(chǔ),其他的指向則會(huì)丟失。當(dāng)串行化對(duì)象時(shí),PHP會(huì)嘗試首先調(diào)用其成員函數(shù)__sleep()。這將允許對(duì)象在被串行化之前進(jìn)行諸如最后的清理工作等。同樣地,當(dāng)使用unserialize()函數(shù)將對(duì)象恢復(fù)時(shí),會(huì)調(diào)用成員函數(shù)__wakeup()。

返回值

返回一個(gè)可以被存儲(chǔ)在任何地點(diǎn)的包含對(duì)象的字節(jié)流表達(dá)式的字符串。

unserialize()

(PHP 4, PHP 5, PECL axis2:0.1.0-0.1.1)unserialize — 從一個(gè)已存儲(chǔ)的表達(dá)式中獲得一個(gè)PHP變量值

說(shuō)明

mixed unserialize ( string $str )unserialize()獲取一個(gè)簡(jiǎn)單類型的串行化變量并將其轉(zhuǎn)換回PHP變量值。

參數(shù)

str

串行化后的字符串如果被反串行化的變量是一個(gè)對(duì)象,則成功恢復(fù)該對(duì)象的結(jié)構(gòu)后,PHP將自動(dòng)嘗試執(zhí)行該對(duì)象的__wakeup()成員函數(shù)(如果其存在)。unserialize_callback_func 指令:你可以設(shè)定在此過(guò)程中唄執(zhí)行的回調(diào)函數(shù),如果某個(gè)未被定義的類應(yīng)當(dāng)在反串行化時(shí)被實(shí)例化(以避免獲得一個(gè)不完全的對(duì)象 “__PHP_Incomplete_Class”)。你可以使用php.ini,ini_set()或者.htaccess來(lái)定義 “unserialize_callback_func”。當(dāng)一個(gè)未被定義的類被實(shí)例化時(shí),它會(huì)被調(diào)用。屏蔽這個(gè)特性只需將其設(shè)為空即可。

返回值

返回轉(zhuǎn)換后的數(shù)值,可能是布爾變量、實(shí)數(shù)、浮點(diǎn)數(shù)、字符串、數(shù)組或者對(duì)象。假如傳入的字符串不可以被反串行化,則返回FALSE,同時(shí)拋出NOTICE錯(cuò)誤。(以上譯自PHP手冊(cè))

PHP串行化實(shí)例

數(shù)組的串行化和反串行化

OK,讓我們來(lái)用實(shí)例學(xué)習(xí)一下,首先,請(qǐng)建立sample1.php文件,我們?cè)谶@個(gè)文件中用如下語(yǔ)句來(lái)創(chuàng)建一個(gè)哈希數(shù)組:

代碼:<?php$animal =array('type' => 'human','name' => 'hanguofeng','age'=> '20');?>為了測(cè)試這個(gè)數(shù)組的值,你可以使用print_r()函數(shù)來(lái)輸出數(shù)組,輸出的結(jié)果如下:

代碼:Array([type] => human[name] => hanguofeng[age] => 20)那么我們將他來(lái)串行化一下,串行化的代碼如下:

代碼:<?php$animal =array('type' => 'human','name' => 'hanguofeng','age'=> '20');$animal_ser=serialize($animal);echo($animal_ser);?>這里我們將數(shù)組$animal串行化,將返回的串行化字符串保存在變量$animal_ser中,并輸出,輸出的結(jié)果是:

代碼:a:3:{s:4:'type';s:5:'human';s:4:'name';s:10:'hanguofeng';s:3:'age';s:2:'20';}我們來(lái)簡(jiǎn)單對(duì)這個(gè)字符串進(jìn)行一個(gè)解析:a:3表示這是一個(gè)數(shù)組型的對(duì)象(a),他共有三個(gè)內(nèi)置的對(duì)象(3)大括號(hào)里面的部分是以逗號(hào)分割的對(duì)象表達(dá)式列表,以s:4:'type'為例,他表示一個(gè)字符串(s),長(zhǎng)度為4位(4),值為“type”,即哈希數(shù)組的第一個(gè)元素的鍵。后面的部分以此類推,我們不再贅述,你可以試試自己將各種對(duì)象串行化,看看串行化后的字符串是如何構(gòu)建的。下面來(lái)看數(shù)組的反串行化,即將我們上面生成的串行化字符串恢復(fù)為數(shù)組,代碼如下:

代碼:<?php$animal_ser='a:3:{s:4:'type';s:5:'human';s:4:'name';s:10:'hanguofeng';s:3:'age';s:2:'20';}';$animal = unserialize($animal_ser);print_r($animal);?>在第一行中,我們假設(shè)$animal_ser的值為上面獲得的串行化字符串,在第二行將該字符串恢復(fù)為開(kāi)始的數(shù)組,并賦值給$animal,最后輸出$animal這個(gè)數(shù)組,此時(shí)的輸出和本節(jié)開(kāi)始時(shí)輸出的原始數(shù)組是一樣的,即:

代碼:Array([type] => human[name] => hanguofeng[age] => 20)這樣我們就完成了數(shù)組的反串行化。

拓展知識(shí)—自定義對(duì)象的串行化和反串行化

對(duì)數(shù)組進(jìn)行串行化是一個(gè)基礎(chǔ)操作,然而在實(shí)際的程序設(shè)計(jì)中,我們可能經(jīng)常對(duì)其他類型的變量進(jìn)行串行化,例如對(duì)某個(gè)自定義對(duì)象進(jìn)行串行化,這里有一個(gè)我們自己編寫(xiě)的類A(保存在classa.inc中):

代碼:<?phpclass A {var $one = 1;function show_one() { echo $this->one;}}?>我們?cè)谌缦麓a中創(chuàng)建類的實(shí)例并對(duì)該實(shí)例進(jìn)行串行化:

代碼:<?phpinclude('classa.inc');$a=new A;echo(serialize($a));?>此時(shí)輸出的內(nèi)容為:

代碼:O:1:'A':1:{s:3:'one';i:1;}總體來(lái)看,這個(gè)串行化字符串輸出了改對(duì)象當(dāng)前的狀態(tài),即i的值為1。下面我們來(lái)逐個(gè)分析其中的細(xì)節(jié)。O:1:由于當(dāng)前的變量是一個(gè)自定義對(duì)象,因此該表征字符為“O”,表示Object。后面的'A'標(biāo)識(shí)了該變量是哪個(gè)類的實(shí)例,這里即A類。大括號(hào)內(nèi)即該實(shí)例的各個(gè)屬性的名稱和值。而后我們將其進(jìn)行反串行化:

代碼:<?phpinclude('classa.inc');$s = 'O:1:'A':1:{s:3:'one';i:1;}';$a = unserialize($s);$a->show_one();?>此時(shí)輸出“1”,即調(diào)用了A類的show_one()方法。你可以注意到雖然在實(shí)例的串行化字符串中并沒(méi)有包含類的方法,但是我們將其反串行化后,仍然可以調(diào)用類的方法,這個(gè)特性在PHP4及以上版本中被支持(當(dāng)然,你需要包含類的定義文件classa.inc)。

注:你可以參考PHP手冊(cè)中Language Reference->Classes and Objects->Serializing objects - objects in sessions一節(jié)的內(nèi)容。

在JavaScript中串行化為JSON—使用json2.js

JavaScript中沒(méi)有直接串行化對(duì)象的內(nèi)置方法,當(dāng)然你可以自己寫(xiě)一個(gè),不過(guò)我還是強(qiáng)烈推薦你在這里偷個(gè)小懶,使用現(xiàn)成的組件,JSON的官方網(wǎng)站www.json.org提供了對(duì)JavaScript對(duì)象實(shí)現(xiàn)JSON串行化的代碼庫(kù)—json2.js,你可以從這里獲得它。

獲得完畢json2.js文件后,你可以打開(kāi)這個(gè)文件,在文件的前部分包含了相當(dāng)大量的注釋信息,如果你的英文足夠好,那么你可以省略我這一節(jié),參考該文件的注釋就可以了,如果作為程序員,你已經(jīng)看夠了大片的字母,想看看我的漢字+字母,那你可以向下繼續(xù)了。

簡(jiǎn)單的翻譯下這個(gè)注釋:可參考http://www.JSON.org/js.html該文件創(chuàng)建了一個(gè)包含兩個(gè)方法的全局對(duì)象JSON,它的方法分別是:

代碼:JSON.stringify(value, whitelist)value;任意的JavaScript值,一般是一個(gè)對(duì)象或者數(shù)組whitelist;一個(gè)可選的數(shù)組參數(shù),用于判定對(duì)象值如何被串行化這個(gè)方法通過(guò)一個(gè)JavaScript值來(lái)生成JSON文本。在進(jìn)行串行化時(shí),根據(jù)可選的參數(shù)whitelist,有三種可能:如果某個(gè)對(duì)象有toJSON方法,那么則調(diào)用該方法,toJSON方法的返回值將被串行化。否則,如果可選參數(shù)whitelist是一個(gè)數(shù)組,那么數(shù)組中的元素將被用來(lái)選擇對(duì)象進(jìn)行串行化時(shí)的的成員。否則,如果沒(méi)有使用whitelist參數(shù),則對(duì)象的所有成員將被串行化。如果值沒(méi)有JSON的表現(xiàn)形式,例如undefined或者函數(shù),則其不會(huì)被串行化。在對(duì)象中,這樣的值會(huì)被忽略,而在數(shù)組中將會(huì)被null替換。JSON.stringify(undefined)會(huì)返回undefined。日期將會(huì)被串行化為被引用的ISO日期。例:

代碼:var text = JSON.stringify(['e', {pluribus: 'unum'}]);//text is '['e',{'pluribus':'unum'}]'JSON.parse(text, filter)該方法解析一個(gè)JSON文本,并生成一個(gè)組件或者數(shù)組,其可能拋出一個(gè)SyntaxError異常。可選的filter參數(shù)是一個(gè)可過(guò)濾和轉(zhuǎn)換結(jié)果的函數(shù)、它接受每個(gè)鍵和值,它的返回值用來(lái)替換源值。如果它返回所接收的值,那么結(jié)果不會(huì)被改變。如果他返回undefined,則該成員會(huì)被刪除。例:

代碼://解析文本,如果某個(gè)鍵包含字符串“date”,則將其值轉(zhuǎn)換為日期myData = JSON.parse(text, function (key, value) {return key.indexOf('date') >= 0 ? new Date(value) : value;});上面的入門(mén)教程已經(jīng)使你基本了解了json2.js的使用方法,這里關(guān)于該文件我就不再贅述了,只是有一個(gè)小提示,如果你想簡(jiǎn)單的解析一個(gè)JSON文本,那么可以使用eval()函數(shù),改函數(shù)是JavaScript的內(nèi)置函數(shù),例如解析在JSON.stringify的案例中生成的JSON文本,可以使用:

代碼:var myE = eval('['e',{'pluribus':'unum'}]');來(lái)獲得對(duì)象myE。

在JavaScript中串行化為JSON—使用prototype.js

如果你和我一樣,喜歡在自己的項(xiàng)目中使用開(kāi)源的JavaScript框架,那么你可能可以省去使用json2.js文件了,這里以protype.js為例,該文件可以在http://www.prototypejs.org下載,由于本文不是在講JavaScript框架,這里我假設(shè)你對(duì)prototype.js的使用已經(jīng)有所了解了。prototype.js中提供了對(duì)Object對(duì)象的toJSON方法,你可以使用Object.toJSON()方法來(lái)實(shí)現(xiàn)對(duì)對(duì)象的串行化,例如:

代碼:var cat={name:'hellokitty',height:'6 apples'}alert(Object.toJSON(cat));//將彈出對(duì)話框,內(nèi)容為 {'name': 'hellokitty', 'height': '6 apples'}另外,在prototype.js中還有另外的JSON支持,主要是在Ajax對(duì)象中對(duì)Ajax返回請(qǐng)求中JSON內(nèi)容的解析。這里暫時(shí)與我們的內(nèi)容無(wú)關(guān),也不再介紹了。

PHP與JSON

在上面我們一起了解了PHP進(jìn)行對(duì)象串行化的方法以及在JavaScript中進(jìn)行將對(duì)象串行化為JSON的方法,你大致會(huì)質(zhì)疑我為什么將二者放在一起,因?yàn)樗麄兊恼Z(yǔ)法實(shí)際是不完全一樣的,然而,在PHP中,可以對(duì)JSON文本進(jìn)行反串行化,也可以將PHP的對(duì)象串行化為JSON而非PHP風(fēng)格的文本。這主要是靠json_decode和json_encode兩個(gè)函數(shù)來(lái)完成的,需要特別說(shuō)明的是,這兩個(gè)函數(shù)在PHP 5 >= 5.2.0中才被支持,如果你要編寫(xiě)運(yùn)行在PHP4環(huán)境下的程序,那么這兩個(gè)函數(shù)是不可以使用的。

json_decode函數(shù)

語(yǔ)法

mixed json_decode ( string $json [, bool $assoc] )獲取一個(gè)JSON編碼文本,并且將其轉(zhuǎn)換為PHP變量

參數(shù)

json被JSON編碼的文本assoc當(dāng)為T(mén)RUE時(shí),返回的值為聯(lián)合數(shù)組

返回值

返回一個(gè)對(duì)象,或者如果可選的assoc參數(shù)為T(mén)RUE,則一個(gè)聯(lián)合數(shù)組將會(huì)被返回

json_encode函數(shù)

語(yǔ)法

string json_encode ( mixed $value )該函數(shù)返回一個(gè)值的JSON表達(dá)式

參數(shù)

value要被編碼的值,可以為除resource外的任何類型參數(shù)這個(gè)函數(shù)僅在UTF-8編碼格式時(shí)起作用

返回值

當(dāng)成功時(shí)返回編碼后的JSON文本

json_decode函數(shù)實(shí)例

下面兩個(gè)例子都基于我們的一個(gè)情景假設(shè),即,我們有一個(gè)用戶注冊(cè)的模塊,這個(gè)模塊以“面向?qū)ο蟆钡姆绞焦ぷ鳎趈son_decode函數(shù)實(shí)例中,我們?cè)谇芭_(tái)將用戶的注冊(cè)信息變?yōu)橐粋€(gè)類的屬性,而后傳遞到后臺(tái)的php文件(這里為了簡(jiǎn)便,就不用Ajax了)。在json_encode實(shí)例中,我們?cè)趆tml文件中引用一個(gè)js 文件,地址指向php文件,在php文件中輸出json編碼后的用戶對(duì)象(同樣為了簡(jiǎn)便,我們直接生成一個(gè)對(duì)象而不從數(shù)據(jù)庫(kù)中取信息),并在html中輸出。好了,先來(lái)看前臺(tái)的頁(yè)面json_encode.htm,這個(gè)頁(yè)面模仿了通常的注冊(cè)頁(yè)面,在其上面有一個(gè)表單,當(dāng)提交時(shí),觸發(fā) JavaScript函數(shù),生成一個(gè)用戶對(duì)象user,將表單內(nèi)容設(shè)為用戶對(duì)象的屬性,生成JSON文本,以POST方式傳遞到后臺(tái)的 json_encode.php文件。在js_encode.php文件中,將JSON文本用json_decode函數(shù)解析為PHP對(duì)象,并輸出。好了,先來(lái)看json_encode.html文件,文件代碼如下:

代碼:<!DOCTYPE html PUBLIC '//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><html xmlns='http://www.w3.org/1999/xhtml'><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>json_decode</title><script src='http://m.b3g6.com/bcjs/json2.js' type='text/javascript'></script><script type='text/javascript'>function JSON_test(o){var user = { name:document.getElementById('txt_name').value, email:document.getElementById('txt_email').value, password:document.getElementById('txt_name').value}var json_string = JSON.stringify(user);

document.getElementById('txt_json').value=json_string;alert('點(diǎn)擊確定后將提交表單');o.submit();}</script></head><body><form name='form1' method='post' action='json_encode.php' onsubmit='JSON_test(this)'> <label for='txt_name'>姓名</label> <p><input type='text' name='txt_name' /> </p> <label for='txt_email'>郵箱</label> <p><input type='text' name='txt_email' /> </p> <p><label for='txt_password'>密碼</label> </p> <p><input type='text' name='txt_password' /> </p> <p> <input type='text' name='txt_json' /><label for='button'></label><input type='submit' name='button' value='JSON' /> </p></form></body></html>當(dāng)提交表單時(shí),將觸發(fā)JavaScript函數(shù)JSON_text(),該函數(shù)首先建立一個(gè)JavaScript對(duì)象user,將其name、email 和password屬性分別設(shè)為對(duì)應(yīng)表單的值,而后使用json2.js文件的JSON.stringify方法將其轉(zhuǎn)換為JSON文本 json_string,最后設(shè)定隱藏域(這里為了使你看的清楚,我把這個(gè)隱藏域以文本框形式顯示了)txt_json的值為json_string,并提交表單。下面到j(luò)son_encode.php文件,如下:

代碼:<?php$json_string = $_POST['txt_json'];if(ini_get('magic_quotes_gpc')=='1'){$json_string=stripslashes($json_string);}$user = json_decode($json_string);echo var_dump($user);?>在這個(gè)文件中,首先得到j(luò)son_encode.html文件中POST表單域txt_json的值,放入變量$json_string中,而后判斷,如果當(dāng)前PHP的設(shè)定為magic_quotes_gpc=On,即傳入的雙引號(hào)等會(huì)被轉(zhuǎn)義,這樣json_decode函數(shù)無(wú)法解析,因此我們要將其反轉(zhuǎn)義化。而后,使用json_decode函數(shù)將JSON文本轉(zhuǎn)換為對(duì)象,保存在$user變量中,最終用echo var_dump($user);,將該對(duì)象dump輸出出來(lái),最終結(jié)果是:

代碼:object(stdClass)#1 (3) { ['name']=> string(10) 'hanguofeng' ['email']=> string(18) 'example@domain.com' ['password']=> string(10) 'hanguofeng'}json_encode函數(shù)實(shí)例

在這個(gè)例子中,仍然是由兩部分構(gòu)成的,即json_enode.html和json_encode.php。在json_decode.html文件中,基本與 json_decode.html文件的表單類似,但是不同的是,這次我們要從json_encode.php文件中獲得相應(yīng)用戶的JSON文本,先來(lái)看這個(gè)PHP文件吧:

代碼:<?phpClass user{public $name='';public $email='';public $password='';};$myUser = new user;$myUser->name='hanguofeng';$myUser->email='example@domain.com';$myUser->password='hanguofeng';$json_string = json_encode($myUser);?>var user = <?php echo($json_string)?>;這個(gè)文件首先建立類user,而后獲得一個(gè)user類的實(shí)例myUser,并設(shè)定其用戶名、郵箱和密碼,接下來(lái)使用json_encode函數(shù)將其轉(zhuǎn)換為 JSON文本,保存在變量$json_string中,最后輸出一段JavaScript代碼,以在JavaScript中建立全局變量user。接下,我們需要在json_encode.html文件中引入json_encode.php文件,并得到user對(duì)象的各個(gè)屬性,如下:

代碼:<!DOCTYPE html PUBLIC '//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><html xmlns='http://www.w3.org/1999/xhtml'><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>json_encode</title><script src='http://m.b3g6.com/bcjs/json_encode.php' type='text/javascript'></script></head><body><form name='form1' method='post'> <label for='txt_name'>姓名</label> <p><input type='text' name='txt_name' /> </p> <label for='txt_email'>郵箱</label> <p><input type='text' name='txt_email' /> </p> <p><label for='txt_password'>密碼</label> </p> <p><input type='text' name='txt_password' /> </p></form><script type='text/javascript' >document.getElementById('txt_name').value=user.name;document.getElementById('txt_email').value=user.email;document.getElementById('txt_password').value=user.password;</script></body></html>在這個(gè)文件中,你需要注意兩點(diǎn),第一是,我們以這樣的代碼引入json_encode.php文件為JavaScript文件:

代碼:<script src='http://m.b3g6.com/bcjs/json_encode.php' type='text/javascript'></script>第二點(diǎn)則是:我們?cè)谖谋究虼a后面加入JavaScript的代碼,對(duì)文本框的value屬性進(jìn)行操作,分別設(shè)定其值為user對(duì)象的相應(yīng)值。

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
www.51av欧美视频| 国产极品一区| 欧美少妇精品| 欧洲在线一区| 精品美女视频 | 日韩国产在线不卡视频| 久久伊人国产| 国产一区二区三区探花| 国产精品一区二区精品视频观看 | 蜜臀av亚洲一区中文字幕| 亚洲高清毛片| 欧美日韩国产免费观看 | 精品国产亚洲一区二区三区| 日韩午夜视频在线| 精品亚洲精品| 亚洲天堂免费电影| 中文一区在线| 久久精品国产久精国产| 成人污污视频| 久久亚洲二区| 亚洲综合福利| 精品美女久久| 夜夜嗨一区二区三区| 国产剧情在线观看一区| 国产精品视频一区二区三区| 久久亚洲人体| 麻豆国产在线| 日韩一级精品| 国产精久久久| 激情婷婷欧美| 97精品国产99久久久久久免费| 视频一区欧美日韩| 国产美女视频一区二区| 国产精品探花在线观看| 成人精品中文字幕| 伊人久久亚洲热| 国产精品欧美三级在线观看| 成人国产精选| 亚洲免费观看高清完整版在线观| 欧美在线日韩| 激情综合网站| 精品黄色一级片| 日韩精品一二三四| 日韩在线视频精品| 深夜日韩欧美| 婷婷色综合网| 国产图片一区| 亚洲字幕久久| 午夜国产一区二区| 成人一二三区| 国产精品亚洲二区| 一区二区电影在线观看| 久久一级电影| 亚洲伦乱视频| 国内不卡的一区二区三区中文字幕| 在线一区免费| 99久精品视频在线观看视频| 国产精品视频一区二区三区综合| 激情综合亚洲| 欧美在线观看视频一区| 精品欧美日韩精品| 欧美一级一区| 国产欧美日韩| 国产日韩一区二区三免费高清| 最新亚洲一区| 亚洲精华国产欧美| 亚洲成人三区| 99在线|亚洲一区二区| 亚洲成人三区| 亚洲欧洲午夜| 久久先锋影音| 蜜桃一区二区三区在线观看 | 免费不卡中文字幕在线| 久久男人天堂| 色综合www| 日本一二区不卡| 午夜精品成人av| 91精品精品| 亚洲精品一二三区区别| 亚洲欧美成人综合| 日韩午夜视频在线| 国产精品magnet| 亚洲伊人av| 激情婷婷久久| 日韩1区2区3区| 老司机免费视频一区二区| 精品亚洲成人| 激情久久久久久| 亚洲精品乱码| 国产成人精品一区二区免费看京| 免费视频一区二区三区在线观看 | 激情视频一区二区三区| 爽好久久久欧美精品| 欧美日韩a区| 欧美天堂视频| 先锋影音久久久| 美女国产一区二区三区| 欧美午夜精品一区二区三区电影| 亚洲专区欧美专区| 国产极品一区| 亚洲女同中文字幕| 另类欧美日韩国产在线| 一区在线视频观看| 黄色欧美在线| 一本一道久久a久久| 国产白浆在线免费观看| 五月精品视频| 国产成人精品一区二区三区免费 | 91精品视频一区二区| 久久青草久久| 久久av日韩| 亚洲精品伊人| 国产精品日韩| 成人在线免费观看网站| 在线精品观看| 国产精品国产三级国产在线观看| 99riav1国产精品视频| 福利精品一区| 麻豆一区二区三| 国产欧美高清视频在线| 视频在线在亚洲| 婷婷亚洲五月色综合| 亚洲深夜视频| 高清av不卡| 捆绑调教日本一区二区三区| 日韩va亚洲va欧美va久久| 夜夜嗨一区二区三区| 女人av一区| 在线国产一区二区| 亚洲激情社区| re久久精品视频| 国产视频一区三区| 亚洲综合精品| 亚洲我射av| 日韩精品免费观看视频| 亚洲精品乱码日韩| 视频精品一区| 国产精品一区二区三区四区在线观看| 日产欧产美韩系列久久99| 日韩av一区二区在线影视| 日韩1区2区3区| 国产精品极品在线观看| 国产一区调教| 欧美aa国产视频| 蜜臀av国产精品久久久久| 狠狠干综合网| 亚洲精品裸体| 欧美xxxx中国| 在线国产一区| 日韩av不卡在线观看| 免费一级欧美在线观看视频| 精品亚洲免a| 午夜国产欧美理论在线播放| 视频一区免费在线观看| 欧美亚洲网站| 国产精品字幕| 首页亚洲欧美制服丝腿| 国产精品99久久免费| 日韩毛片视频| 亚洲三级国产| 老司机精品视频网| aⅴ色国产欧美| 国产精品毛片aⅴ一区二区三区| 不卡福利视频| 日本一区福利在线| 精品日韩视频| 国产欧美日韩视频在线| 91精品成人| 国产一区二区三区四区| 亚洲一区二区网站| www.51av欧美视频| 日韩av三区| 亚洲欧美日韩国产一区| 精品国产亚洲一区二区三区大结局| 国产一区日韩欧美| 欧美精品国产| 亚洲自啪免费| 91精品国产自产在线观看永久∴ | 国产精品1luya在线播放| 伊人久久成人| 久久精品主播| 成人一二三区| 久久精品资源| 国产三级一区| 97精品久久| 日韩精品一区二区三区免费视频| 久久男女视频| 精品亚洲免a| 麻豆免费精品视频| 国产精品jk白丝蜜臀av小说| 日韩精品视频一区二区三区| 久久成人国产| 欧美另类综合| 合欧美一区二区三区| 欧美日韩国产v| 97精品国产一区二区三区| 精品无人区麻豆乱码久久久 | 国产成人精品福利| 国产精品任我爽爆在线播放| 久久国产三级|