PHP 和 HTML 之間有很多互動:PHP 可以產生 HTML,而 HTML 可以將資訊傳遞給 PHP。在閱讀這些常見問題之前,請務必了解如何從外部來源取得變數。關於此主題的手冊頁面也包含許多範例。
編碼在幾個階段都很重要。假設你有一個 字串 $data,其中包含你想要以非編碼方式傳遞的字串,以下是相關的階段
HTML 解譯。為了指定隨機字串,你必須將其包含在雙引號中,並使用 htmlspecialchars() 處理整個值。
URL:URL 由數個部分組成。如果你希望將資料解譯為單一項目,則必須使用 urlencode() 進行編碼。
範例 #1 隱藏的 HTML 表單元素
<?php
echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'."\n";
?>
注意: 使用 urlencode() $data 是錯誤的,因為瀏覽器有責任 urlencode() 資料。所有常見的瀏覽器都會正確執行此操作。請注意,無論方法(即 GET 或 POST)如何,都會發生這種情況。你只會在 GET 請求的情況下注意到這一點,因為 POST 請求通常是隱藏的。
範例 #2 使用者編輯的資料
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>
注意: 瀏覽器會按預期顯示資料,因為瀏覽器會解譯 HTML 跳脫符號。 透過 GET 或 POST 提交時,瀏覽器會對資料進行 url 編碼以進行傳輸,並由 PHP 直接進行 url 解碼。因此,最後你不需要自己執行任何 url 編碼/解碼,一切都會自動處理。
範例 #3 在 URL 中
<?php
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . '">'."\n";
?>
注意: 實際上,你正在偽造 HTML GET 請求,因此需要手動 urlencode() 資料。
注意: 你需要使用 htmlspecialchars() 處理整個 URL,因為 URL 作為 HTML 屬性的值出現。在這種情況下,瀏覽器會先取消 htmlspecialchars() 值,然後傳遞 URL。PHP 將正確理解 URL,因為你已經使用 urlencode() 處理資料。 你會注意到 URL 中的
&
被&
取代。儘管大多數瀏覽器會在你忘記時恢復,但這並非總是可行。因此,即使你的 URL 不是動態的,你也需要使用 htmlspecialchars() 處理 URL。
提交表單時,可以使用影像來代替標準的提交按鈕,標籤如下
<input type="image" src="image.gif" name="foo" />
由於 foo.x 和 foo.y 在 PHP 中會產生無效的變數名稱,因此它們會自動轉換為 foo_x 和 foo_y。也就是說,句點會被底線取代。因此,你可以像存取任何其他在關於從外部來源取得變數的章節中所描述的變數一樣存取這些變數。例如,$_GET['foo_x']。
注意:
請求變數名稱中的空格會轉換為底線。
若要將你的 <form> 結果作為 陣列 發送到你的 PHP 腳本,你可以這樣命名 <input>、<select> 或 <textarea> 元素
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" />
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyOtherArray[]" /> <input name="MyOtherArray[]" />
<input name="AnotherArray[]" /> <input name="AnotherArray[]" /> <input name="AnotherArray[email]" /> <input name="AnotherArray[phone]" />
注意:
在 HTML 中,指定陣列鍵是選擇性的。如果你未指定鍵,則陣列會按照元素在表單中出現的順序填入。我們的第一個範例將包含鍵 0、1、2 和 3。
HTML 結構中的 select multiple 標籤允許使用者從清單中選擇多個項目。然後,這些項目會傳遞到表單的動作處理常式。問題在於它們都以相同的 widget 名稱傳遞。即
<select name="var" multiple="yes">
var=option1 var=option2 var=option3
<select name="var[]" multiple="yes">
請注意,如果你正在使用 JavaScript,則元素名稱上的 []
可能會在您嘗試按名稱參考該元素時導致問題。請改用其數字形式的元素 ID,或將變數名稱括在單引號中,並將其用作元素陣列的索引,例如
variable = document.forms[0].elements['var[]'];
由於 JavaScript(通常)是客戶端技術,而 PHP(通常)是伺服器端技術,且 HTTP 是「無狀態」協定,這兩種語言無法直接共用變數。
然而,這兩種語言之間可以傳遞變數。其中一種方法是使用 PHP 生成 JavaScript 程式碼,並讓瀏覽器自行重新整理,將特定變數傳回 PHP 腳本。下面的範例精確地展示了如何做到這一點 —— 它允許 PHP 程式碼擷取螢幕高度和寬度,這通常只能在客戶端實現。
範例 #4 使用 PHP 生成 JavaScript
<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// 輸出幾何變數
echo "螢幕寬度為: ". $_GET['width'] ."<br />\n";
echo "螢幕高度為: ". $_GET['height'] ."<br />\n";
} else {
// 傳遞幾何變數
// (保留原始查詢字串
// -- post 變數需要以不同的方式處理)
echo "<script language='javascript'>\n";
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
echo "</script>\n";
exit();
}
?>