2011-04-13 90 views
0

我有一個處理產品添加的管理頁面。我使用mysql_real_escape_string來保護我的數據庫免受不必要的字符限制。但是,當我從數據庫中獲取這些數據(例如,帶有單引號的產品名稱,如Dave的Box)時,我在onclick屬性的頁面上顯示時出現錯誤。在PHP中轉義單引號

我用這段代碼來顯示產品代碼。

echo "<li onClick='fill(\"$productName\")'><strong>".stripslashes($row['name'])."</strong> by ".stripslashes($row['brand'])."</li>"; 
+2

**你得到什麼錯誤,什麼HTML代碼,導致它**?你能發佈HTML代碼,而不是PHP代碼嗎? – 2011-04-13 15:09:15

+1

也可以去掉stripslashes(),這裏使用它是錯誤的 – 2011-04-13 15:10:52

回答

1

你應該保護的報價,DBL引號和HTML標記代碼。要使用PHP的htmlspecialchars()ENT_QUOTES集。例如:

htmlspecialchars($row['name'], ENT_QUOTES); 
1

使用json_encode在JavaScript函數調用中的產品名稱,以及htmlspecialchars爲正常的HTML輸出。

1

要歸入其他答案:

  • 使用json_encode正確編碼$productName值作爲JavaScript字符串和
  • 使用htmlspecialchars與報價風格ENT_QUOTES正確編碼它在一個單一的使用引用HTML屬性值。

所以:

echo "<li onClick='" . htmlspecialchars('fill('.json_encode($productName).')', ENT_QUOTES) . "'><strong>" . htmlspecialchars(stripslashes($row['name'])) . "</strong> by " . htmlspecialchars(stripslashes($row['brand'])) . "</li>";