mysql語句中有引號的問題解決方案

神馬和浮雲發表於2014-01-27

在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 實體。

 預定義的字元有:

  • & (和號) 成為 &amp;
  • " (雙引號) 成為 &quot;
  • ' (單引號) 成為 &#039;
  • < (小於) 成為 &lt;
  • > (大於) 成為 &gt;

語法:htmlspecialchars(string,quotestyle,character-set)

語法說明:

引數 描述
string 必需。規定要轉換的字串。
quotestyle

可選。規定如何編碼單引號和雙引號。

 ENT_COMPAT - 預設。僅編碼雙引號。

ENT_QUOTES - 編碼雙引號和單引號。

ENT_NOQUOTES - 不編碼任何引號。

character-set

可選。字串值,規定要使用的字符集。

ISO-8859-1 - 預設。西歐。
ISO-8859-15 - 西歐(增加 Euro 符號以及法語、芬蘭語字母)。
UTF-8 - ASCII 相容多位元組 8 位元 Unicode
cp866 - DOS 專用 Cyrillic 字符集
cp1251 - Windows 專用 Cyrillic 字符集
cp1252 - Windows 專用西歐字符集
KOI8-R - 俄語
GB2312 - 簡體中文,國家標準字符集
BIG5 - 繁體中文
BIG5-HKSCS - Big5 香港擴充套件
Shift_JIS - 日語
EUC-JP - 日語

語法舉例:

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

 

相關文章