2013-04-01 104 views
-1

我正在從一個HTML頁面輸入數據來到PHP頁面,並存儲在一個變量,如$代碼。問題是,當我提出: -存儲字符串,因爲它在PHP

#include<iostream> 
    using namespace std; 
    int main() { 
    cout<<"1"; 
    } 

那麼什麼存儲在$代碼: -

#include<iostream> 
using namespace std; 
int main() { 
cout<<\"1\";   //Notice the change , these backslashes at cout. 
} 

我怎樣才能避免這種情況?我正在使用000webhost.com &這件事情不會發生在我的本地主機。

+0

這是一個新版本的PHP?大聲笑 –

+4

[魔術引號](http://php.net/manual/en/security.magicquotes.php)? –

+3

@Kaii:難道你們難以理解它是一個包含C++代碼的字符串,或者你想贏得「最糟糕的小丑」杯嗎? – zerkms

回答

-1

它,因爲引號被轉義所以這dosent發生: 說你是存儲「蘋果」 如果報價沒有逃過這會發生

$var = ""apple""; 

導致錯誤,而這個工程:

$var = "\"apple\""; 

如果您打算迴應我認爲的數據,則可以使用stripslashes();擺脫正斜槓。

+3

可怕的建議。你需要修復根源,而不是後果。 -1 – zerkms

+0

嗯,我認爲他們不能解決000webhost抱歉的問題。但是如果他們確實有權限訪問php.ini中的magicquotes。 – lemondrop

+0

@lemondrop比嘗試http://www.ramnode.com/其非常便宜..你可以嘗試的東西 –

0

最佳解決方案 在您的php.ini文件中,可能性是magic_quotes_gpc指令設置爲on。出於安全原因,這應該被禁用。如果您無法訪問php.ini文件(例如在共享主機上),則始終可以使用.htaccess指令(假設這是apache服務器)完成相同的操作。

在php.ini

magic_quotes_gpc Off 

在.htaccess文件:

php_flag magic_quotes_gpc Off 

這究竟是爲什麼?

這種情況發生的原因是由於以下邏輯過程。

需要轉義的字符串被髮送到服務器。 這是我的字符串。這很棒。 魔術引號在它到達您的代碼之前會轉義撇號。 這是我的字符串。太棒了 mysql_real_escape_string現在有兩個字符可以轉義,反斜槓\以及撇號\'。 這是我的字符串。它很棒 這個新的超級轉義字符串存儲在數據庫中。 當從數據庫中檢索字符串時,它會傳遞給stripslashes。這將刪除步驟3中添加的兩個轉義,但由於其中一個反斜槓已被轉義,因此stripslashes認爲它屬於它。 這是我的字符串。這很棒 當你重新提交這些字符串到數據庫時,這個問題可能會非常失控,因爲每次反斜槓的數量都會增加。

替代解決方案 一個快捷方便的替代方案是在將字符串傳遞給mysql_real_escape_string之前,簡單地刪除由magic_quotes添加的斜線。

$str = stripslashes($code); 
$str = mysql_real_escape_string($str);