明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

PHP 與 HTML

[摘要]PHP 和 HTMLPHP 和 HTML 可以互操作: PHP 能夠生成 HTML, 而 HTML 可以傳遞信息給 PHP. 1. 我用一個(gè) form/URL傳值時(shí),我要怎樣 編碼/解碼? 2. 我在用 <input type="image"> 標(biāo)記, 但 foo....

PHP 和 HTML
PHP 和 HTML 可以互操作: PHP 能夠生成 HTML, 而 HTML 可以傳遞信息給 PHP. 1. 我用一個(gè) form/URL傳值時(shí),我要怎樣 編碼/解碼? 2. 我在用 <input type="image"> 標(biāo)記, 但 $foo.x and $foo.y 變量卻不可用. 它們?cè)谀睦? 3. 我怎樣創(chuàng)建 HTML <form>數(shù)組? 4. 我怎樣從一個(gè)多選框得到所有的結(jié)果值?
1. 我用一個(gè) form/URL傳值時(shí),我要怎樣 編碼/解碼?
在幾個(gè)階段里,編碼是非常重要的. 假設(shè)你有一個(gè) 字符串變量 $data, 它包含一些你要以 未編碼 方式傳遞的字符, 要經(jīng)過下面階段的編碼:

HTML 解釋. 為了表示任何一個(gè)字符串, 你必須 把它包含在雙引號(hào)里, 而且是HTML特殊字符的要使用 htmlspecialchars寫法.
URL: URL 由幾部分組成. 你想你的數(shù)據(jù)被看成URL的一部分, 你 必須 用 urlencode()編碼它.


例 52-1. 隱藏的 HTML 表單元素 <?php    echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n";?>
注意: 這里不能用urlencode() $data, 因?yàn)?urlencode() 數(shù)據(jù)是瀏覽器的責(zé)任. 絕大多數(shù)瀏覽器可以正確處理這樣的數(shù)據(jù). 無論用何種方法( GET POST). 你可以只考慮 GET 請(qǐng)求, 因?yàn)?POST 請(qǐng)求通常被隱藏了.
例 52-2. 用戶編輯數(shù)據(jù) <?php    echo "<textarea name=mydata>\n";    echo htmlspecialchars($data)."\n";    echo "</textarea>";?>
注意: 在瀏覽器窗口顯示的數(shù)據(jù)會(huì)被解碼成可讀的,因?yàn)闉g覽器會(huì)對(duì) HTML 標(biāo)記進(jìn)行解釋.
一旦提交, 無論GET 還是 POST, 瀏覽器在傳輸數(shù)據(jù)時(shí)會(huì)進(jìn)行URL編碼,PHP則會(huì)對(duì)它進(jìn)行解碼. 一切都是自動(dòng)進(jìn)行的,你不需要做什么.
例 52-3. 在URL串里 <?php    echo "<a href=\"" . htmlspecialchars("/nextpage.php?stage=23&data=" .        urlencode($data)) . "\">\n";?>
注意: 實(shí)際上你在自己寫一個(gè) GET 請(qǐng)求, 所以用urlencode() 對(duì)它進(jìn)行編碼就是不可缺少的.
注意: 你需要htmlspecialchars() 整個(gè)URL串, 因?yàn)閁RL串是 HTML-屬性的一部分. 這種情況下, 瀏覽器首先 反-htmlspecialchars() 這個(gè)值, 然后送出 URL . PHP 會(huì)識(shí)別這個(gè)URL串, 因?yàn)槟阌?urlencoded() 對(duì)它進(jìn)行了編碼.
你會(huì)發(fā)現(xiàn) & 在 URL 串中 被替換成 &. 雖然你沒有編碼大部分的瀏覽器也會(huì)幫你做,但并不是所有的都能. 所以即使你在寫一個(gè)靜態(tài)的URL,你也需要 用 htmlspecialchars() 來對(duì) URL 進(jìn)行編碼.

2. 我在用 <input type="image"> 標(biāo)記, 但 $foo.x and $foo.y 變量卻不可用. 它們?cè)谀睦?
在提交一個(gè)表單里, 可能使用一個(gè) image 控件而不是使用 標(biāo)準(zhǔn)的提交按鈕: <input type="image" src="http://www.okasp.com/techinfo/image.gif" name="foo">When 當(dāng)用戶點(diǎn)上 image 控件的某個(gè)地方時(shí), 表單被提交到服務(wù)器,并有兩個(gè)附加的變量: foo.x and foo.y.
因?yàn)?$foo.x 和 $foo.y 在 PHP 里是無效的變量名, 所以它們自動(dòng)被轉(zhuǎn)換成$foo_x and $foo_y. 也就是說, 圓點(diǎn)被替換成了下劃線.
3. 我怎樣創(chuàng)建 HTML <form>數(shù)組?
為了使你的表單結(jié)果作為數(shù)組送往PHP腳本,你可以給 <input>, <select> or <textarea> 元素象下面這樣取名: <input name="MyArray[]"><input name="MyArray[]"><input name="MyArray[]"><input name="MyArray[]">注意元素名后面的中括號(hào)不能省, 就是它使結(jié)果成為一個(gè)數(shù)組. 你可以通過元素名把它們排成不同的數(shù)組 : <input name="MyArray[]"><input name="MyArray[]"><input name="MyOtherArray[]"><input name="MyOtherArray[]">上面的代碼產(chǎn)生了兩個(gè)數(shù)組, MyArray 和 MyOtherArray, 送往PHP. 當(dāng)然也可以為你的數(shù)組指明鍵值: <input name="AnotherArray[]"><input name="AnotherArray[]"><input name="AnotherArray[email]"><input name="AnotherArray[phone]">AnotherArray 數(shù)組會(huì)容納下標(biāo) 0, 1, email and phone.

說明: 在元素名里標(biāo)明下標(biāo)值是可選的.如果你沒有標(biāo)明,數(shù)組會(huì)按元素在表單里出現(xiàn)的順序來依次填充. 如我們的頭一個(gè)例子里數(shù)組的下標(biāo)分別是: 0, 1, 2 and 3.

參見 Array 函數(shù) and PHP外部變量.
4. 我怎樣從一個(gè)多選框得到所有的結(jié)果值?
HTML里的多選框是用來讓用戶從列表里選多個(gè)值的.這些值然后被送往表單的處理腳本. 問題在于它們都有同樣的變量名. 例如: <select name="var" multiple>每一個(gè)被選擇的項(xiàng)會(huì)這樣傳值給處理腳本: var=option1var=option2var=option3每個(gè)值覆蓋了前一項(xiàng)的值. $var 解決辦法是使用 PHP的 "表單元素?cái)?shù)組"特性.下面就是: <select name="var[]" multiple>PHP會(huì)把 $var當(dāng)成一個(gè)數(shù)組.每個(gè)被選擇項(xiàng)都會(huì)分配給一個(gè)數(shù)組單元. 第一項(xiàng)是$var[0], 下一項(xiàng)是 $var[1], 依此類推. count() 函數(shù)可以用來判斷數(shù)組有多少選擇項(xiàng) ,如果有必要的話,還可以用 sort() 函數(shù)來對(duì)數(shù)組進(jìn)行排序.
如果你在使用 JavaScript , 直接使用元素名引用可能會(huì)出錯(cuò). 你應(yīng)該使用它的數(shù)字索引,或者把變量名放在單引號(hào)之內(nèi).例如: variable = documents.forms[0].elements['var[]'];


標(biāo)簽:PHP 與 HTML