PHP 格式化字符串函數:addslashes()和stripslashes()

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

發佈了48 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章