2012-11-06 86 views
0

我有這個簡單的PHP變量:PHP隨時更換撇隨着反斜槓撇號

$Title = $_POST['text']; 

,當它有這個輸入:here's the text

當它寫入一個文件的PHP會承認,因爲這:here\'s the text

$Filename = 'index.php'; 
$Handle = fopen($Filename, "r"); 
$Contents = fread($Handle, filesize($Filename)); 
fclose($Handle); 

$TitleTag = extractor($Contents, "<title>", "</title>"); 

$Contents = str_replace ($TitleTag, $Title, $Contents); 
$Handle = fopen($Filename, 'w+'); 
fwrite($Handle, $Contents); 
fclose($Handle); 

如何得到完全就像鍵入的內容的用戶?感謝

+2

檢查['禁用Magic Quotes'](http://www.php.net/manual/en/security.magicquotes.disabling.php) – air4x

+0

@ air4x:Lol,同時檢查[migrating to 5.4](http://www.php.net) /manual/en/migration54.php),因爲從5.4中全部刪除了魔術引號 –

+0

@EliasVanOotegem我沒有從OP使用php 5.4的問題中得到它。另外還有什麼可以解釋PHP將反斜槓添加到用戶輸入中的單引號中。它已從php 5.4中刪除,在Magic Quotes部分本身的一個大紅色框中給出。 – air4x

回答

2

快速和簡單的解決方法是:

fwrite($handle,stripslashes($Contents)); 

see the docs
或者,你可以有PHP把內容作爲字符串格式,這將返回正確的轉義字符,太:

fwrite($Handle,sprintf($Contents)); 

但是很疲憊,如果在您的代碼中某處存在%字符,則必須加倍,否則sprintf會將其視爲佔位符:

fwrite($Handle,sprintf(str_replace('%','%%',$Contents))); 

那麼,這需要兩個操作,是不是最好的方法,尤其是因爲我得到的印象是你正在處理的HTML字符串(style='width:50%' < - 不完全是不可能的)