在mysql的查詢、修改、插入、刪除的sql語句裡有引號如何處理?
例如:
<? $name = "my name is xcxc"; $people = "i'm chinese people"; $sql = "update table set field1='$name', field2='$people'"; ?>
其實有很多方法可以解決,比如strtr、str_replace等字串替換函式,將單引號(')和雙引號(")替換成轉移單引號(\')和轉移雙引號(\"),還可以使用addslashes函式將指定的預定義字元前新增反斜槓。
下面看看我的辦法
我使用的是htmlspecialchars() 函式,htmlspecialchars() 函式把一些預定義的字元轉換為 HTML 實體。
預定義的字元有:
- & (和號) 成為 &
- " (雙引號) 成為 "
- ' (單引號) 成為 '
- < (小於) 成為 <
- > (大於) 成為 >
語法:htmlspecialchars(string,quotestyle,character-set)
語法說明:
引數 | 描述 |
string | 必需。規定要轉換的字串。 |
quotestyle |
可選。規定如何編碼單引號和雙引號。 ENT_COMPAT - 預設。僅編碼雙引號。 ENT_QUOTES - 編碼雙引號和單引號。 ENT_NOQUOTES - 不編碼任何引號。 |
character-set |
可選。字串值,規定要使用的字符集。 ISO-8859-1 - 預設。西歐。 |
語法舉例:
<?php $str = "i'm a chinese"; $str2 = htmlspecialchars($str,ENT_QUOTES); ?>
例子
<html> <body> <?php $str = "John & 'Adams'"; echo htmlspecialchars($str, ENT_COMPAT); echo "<br />"; echo htmlspecialchars($str, ENT_QUOTES); echo "<br />"; echo htmlspecialchars($str, ENT_NOQUOTES); ?> </body> </html>
瀏覽器輸出:
John & 'Adams' John & 'Adams' John & 'Adams'
如果在瀏覽器中檢視原始碼,會看到這些 HTML:
<html> <body> John & 'Adams'<br /> John & 'Adams'<br /> John & 'Adams' </body> </html>