2010-08-26 66 views
0

我對PHP的知識並不強,但我從未見過這種情況。在配置文件中,有在一個數組定義像這樣的選項列表:PHP表單變量和POST - HTML編碼字符串

$testarray[] = "None"; 
$testarray[] = "Item 1 with normal text"; 
$testarray[] = "Item 2® with html encoded string"; 
$testarray[] = "Item3® with another html encoded string"; 

所以,現在,當產生的形式,它執行一個簡單的每個循環來創建單選按鈕的列表:

foreach ($testarray as $key=>$item){ 
echo '<div id="padBottom"><input type="radio" name="formItem"'; 
    if ($item == $_SESSION['ss']['selection']) echo ' checked="checked"'; 
    echo ' value="' . $item. '" />' . $item. '</div>'; 
} 

到目前爲止,表單生成就像它應該。不工作的部分是If語句部分。在此表單發佈到的頁面上,它執行一個簡單調用來設置$_SESSION['ss']['selection'] = $_POST['formItem'];發生這種情況時,進入會話的值是實際註冊的商標符號,而不是我所期望的'&reg;'。因此,如果您選擇一個包含HTML編碼實體的項目,我們沒有找到匹配項,並且您的選擇似乎丟失了。在本例中,選擇第一個或第二個選項會導致選擇適當的單選按鈕 - 如果選擇選項3或4,則返回到此屏幕時不會顯示任何選擇。

附加信息 - 此頁面的字符集是UTF-8,如果這有什麼不同。

事情我已經嘗試在接下來的頁面上的POST變量

  1. 用htmlspecialchars:結果,什麼都沒有,仍呈現實際的符號。
  2. htmlspecialchars對每個無線電選項的形式值:結果,我得到&amp;reg;作爲我的價值的一部分,顯示不好。

回答

3

某些字符(包括&符號)在HTML中有特殊含義,如果不希望特殊含義生效,則必須使用represent them as entities

在這種情況下,它是您要插入值屬性中需要編碼的變量。

+0

感謝輸入。我知道它與html編碼有關,我只是沒有嘗試過正確的組合。我嘗試了#1以上,然後#2以上#1仍在原地,並沒有奏效。但只是簡單的HTML編碼的價值,而不是在崗位上再次工作很好。謝謝! – Tommy 2010-08-26 13:23:09

1

它可能更好地工作,如果你使用的項目的索引,而不是它的內容,因爲該指數只是一個數字在這種情況下:

foreach ($testarray as $key=>$item) { 
    echo '<div id="padBottom"><input type="radio" name="formItem"'; 
    if ($key == $_SESSION['ss']['selection']) echo ' checked="checked"'; 
    echo ' value="' . $key .'" />' . $item. '</div>'; 
} 
+0

是的我同意,我寧願使用整數鍵比字符串匹配,但唉,這不是從上次的程序員給我的東西,我不是要重構這個蒸汽堆o代碼:) – Tommy 2010-08-26 13:24:10