PHP 格式化字符串以便存儲:addslashes()和stripslashes()函數
除了使用字符串函數來重新格式化一個可見的字符串之外,也可以使用其中的一些函數來重新格式化字符串,以便將其存入數據庫。對於字符串來說,某些字符肯定是有效的,但是當將數據插入到數據庫中的時候可能會引起一些問題,因爲數據庫會將這些字符解釋成控制符。這些有問題的字符就是引號(單引和雙引)、反斜槓(\)和NULL字符。
我們需要找到一種標記或是轉義它們的辦法,以便使像MySQL這樣的數據庫能夠理解我們表示的是有實際意義的特殊文本字符,而不是控制序列。爲了將這些字符進行轉義處理,可以在它們前面加一個反斜槓。例如,”(雙引號)就變成\”(反斜槓雙引號),\(反斜槓)就變成\(反斜槓反斜槓)。(這個規則對所有特殊字符都通用,所以,如果在字符串中存在\字符,就需要用\\進行替換。)
PHP提供了兩個專門用於轉義字符串的函數。在將任何字符串寫到數據庫之前,如果你的PHP的默認配置還沒有啓用該功能,你應該使用addslashes()將它們重新格式化,例如:
$feedback=addslashes(trim($_POST['feedback']));
和許多其他字符串函數一樣,addslashes()函數需要一個字符串作爲輸入參數,經過該函數處理,將返回一個重新格式化後的字符串。
例子:
<?php
$str = "He told me:'Hello world! but I don't have any money!'";
echo $str."<br>";
$str_addslashes = addslashes($str);
//輸出經過addslashes()處理的字符串
echo $str_addslashes."<br>";
$str_stripslashes = stripslashes($str_addslashes);
//輸出經過stripslashes()處理的字符串
echo $str_stripslashes;
?>
輸出:
//未處理的字符串
He told me:'Hello world! but I don't have any money!'
//輸出經過addslashes()處理的字符串
He told me:\'Hello world! but I don\'t have any money!\'
//輸出經過stripslashes()處理的字符串
He told me:'Hello world! but I don't have any money!'
調用addslashes()後,所有引號將被加上反斜槓,而Stripslashes()會移除這些反斜槓
這個功能是由magic_quotes_gpc配置指令控制的。如今,在PHP新版本的默認安裝情況下,該指令是關閉的。gpc表示GET、POST和cookie,是第一個字母的組合。這就意味着,來自這些方法或方式的變量將被自動包括在引號內。使用get_magic_quotes_gpc()函數,可以檢查系統上的這個指令是否已經啓用,如果來自這些方法的變量被自動引用在引號中,該函數將返回true。如果系統上該指令爲啓用的,在顯示用戶數據之前,必須調用stripslashes()函數;否則,這些反斜槓會被顯示出來。
注:
當magic_quotes_gpc=On的時候,函數get_magic_quotes_gpc()就會返回1
當magic_quotes_gpc=Off的時候,函數get_magic_quotes_gpc()就會返回0