在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>