2017-04-10 80 views
0

我有一些文本將保存到我的數據庫中。文字可能如下所示:Welcome & This is a test paragraph。當我在PHP中使用htmlspecialchars()htmlentities()對其進行處理後,將此文本保存到我的數據庫中時,該句子將如下所示:Welcome & This is a test paragraph如何在使用htmlspecialchars()和htmlentities()後檢索原始文本

當我檢索並顯示相同的文本時,我希望它是原始格式。我怎樣才能做到這一點?

這是我使用的代碼;

$text= htmlspecialchars(htmlentities($_POST['text'])); 
$text= mysqli_real_escape_string($conn,$text); 
+0

'html_entity_decode'與'htmlentities'是對應的,順便說一句:更好地改變你的sql使用準備好的語句並綁定'$ _POST ['text']'因爲它是查詢。我對你原始數據進行了修改。 – JustOnUnderMillions

+2

爲什麼要這樣做?插入數據不變,並修改它的目的,顯示等。 – AbraCadaver

回答

0

有兩個問題。

首先,您使用htmlentitieshtmlspecialchars兩種編碼HTML字符。這兩個函數都做同樣的事情,但是htmlspecialchars只對具有HTML字符實體等價物的字符子集(特殊那些)起作用。因此,以您的示例爲例,該和號將被編碼兩次(因爲它特殊字符),所以你會真正得到是:

$example = 'Welcome & This is a test paragraph'; 

$example = htmlentities($example); 
var_dump($example); // 'Welcome & This is a test paragraph' 

$example = htmlspecialchars($example); 
var_dump($example); // 'Welcome & This is a test paragraph' 

決定其中那些你需要使用的功能之一(可能htmlspecialchars就足夠了),並且只使用其中的一個。

其次,您在錯誤的時間使用這些功能。 htmlentitieshtmlspecialchars將不會做任何事情「清理」您的數據輸入到您的數據庫。 (並不是說這就是你的意圖,因爲你沒有提到這一點,但很多人似乎都試圖做到這一點。)如果你想保護自己免受SQL注入,bind your values to prepared statements.逃脫它,因爲你正在與mysqli_real_escape_string是好的,但它不是真的足夠。

htmlspecialcharshtmlentities具有特定的用途:將要輸出的字符串中的字符轉換爲HTML文檔。只要等待,直到你準備好做到這一點。

相關問題