2010-05-05 70 views
0

基本上我正在開發一個(非常)簡單的搜索引擎。你可以輸入一個搜索詞,然後將你帶到結果頁面 - 這可以正常工作。然而,在結果頁面上,我有一個按鈕,它會帶您到下一個10個結果:其中$ term是$ _POST ['term']值。用PHP傳遞字符串的問題

echo "<input type='hidden' name='term' value='" . $term . "'>"; 

這導致該術語的以下問題例如是「aidan's」。

單擊下一個10按鈕時,該術語變爲aidan \,並且沒有找到更多結果。

我沒有做任何事情到$期限。

我通常使用Java,但需要使用PHP來完成這個uni任務!

任何幫助將不勝感激。

回答

0

如果使用雙引號,則在使用變量時不必破壞字符串。您還可以使用各種選項,例如已提到的選項或htmlentities()urlencode()。我會用後面的,只是因爲。所以,你最終會得到:

$term = urlencode($term); 
echo "<input type='hidden' name='term' value=\"$term\">"; 
0

您需要htmlspecialchars()數據的每一個位到您的網頁時輸出。像你這樣的設置是世界各地存在太多XSS漏洞的原因,你不應該爲它們做出貢獻。

echo "<input type='hidden' name='term' value='" . htmlspecialchars($term) . "'>"; 

一旦你有了這些,你將不需要模糊的addslashes /引用轉義/不管了。

爲了更輕鬆地在你的代碼,定義

function h($s) { htmlspecialchars($s); } 

echo "<input type='hidden' name='term' value='" . h($term) . "'>"; 
-1

我認爲最簡單的方法是不把$長期作爲隱藏字段的。對於分頁,您可以在會話中記錄搜索到的術語。

+0

錯誤的想法。由於顯而易見的原因,搜索引擎都沒有使用會話來傳遞搜索字符串。 – 2010-05-05 13:03:31

+0

什麼是顯而易見的原因?請原諒我的naif問題,但我沒有看到問題。 – Andrea 2010-05-05 16:08:41

0

您正在尋找的功能是htmlspecialchars()。但要使其工作,必須使用引號來包裝參數。

另外,如果涉及到斜線,則可能需要stripslashes()函數。

所以:

$term = htmlspecialchars(stripslashes($term)); 

echo '<input type="text" name="term" value="' . $term . '" >'; 
0
  1. 總是使用GET方法用於搜索,不自檢。
  2. 要麼關閉魔術引號,要麼手動去除斜槓
  3. 使用帶有ENT_QUOTES參數的htmllspecialchars來編碼窗體的字段值。
  4. 考慮到原樣打印出來的HTML,不使用PHP的回聲,擺脫這一切引用熱潮
  5. 最重要的部分。如果您引用數據庫搜索的術語,請不要在表單中使用帶引號的變量。

所以

if (isset($_GET['term'])) { 
    if (get_magic_quotes_gpc()) $_GET['term'] = stripslashes($_GET['term']); 
    //$term=mysql_real_escape_string($_GET['term']); 
    //perform search here. 
    // 
    $term = htmlspecialchars($_GET['term'],ENT_QUOTES); //from $_GET again 
    ?> 
    <input type="hidden" name="term" value="<?php echo $term?>"> 
    <? 
}