2015-09-02 20 views
3

我有通過基本HTML編輯器輸入的用戶內容。我需要驗證這些內容並將其安全地插入到MySQL數據庫中而不更改其格式。在保留有效的HTML結構的同時爲HTML轉義HTML

說我的用戶內容是:

$usercontent = "<p>This is my content</p>"; 

如果我使用:

mysql_real_escape_string($usercontent); 

我得到這個插入到數據庫:

%3Cp%3EThis+is+my+content%3C%2Fp%3E 

但我想文字HTML插入相反:

<p>This is my content</p> 

有沒有簡單的方法可以將mysql_real_escape_string修改過的內容轉換回普通的HTML?

我應該讓它知道我正在修改一個已經寫好的web應用程序,而且我沒有被重寫整個東西 - 這是我正在做的一個快速調試。因此,我確實需要這樣做 - 我確實需要將正常的HTML存儲在數據庫中,只是確保在這樣做之前我已經驗證了最好的結果。這也排除了整個實施PDO的應用程序作爲一個選項。

我已經做了一些挖掘工作,我找不到這個問題的答案...至少沒有明確地...並且這個問題上的任何事情似乎都被包含在講座中。假設我已經閱讀過這些講座,那麼這個問題有一個簡單的答案嗎?

編輯

原來我奇怪的編碼是在別的地方發生的事情,並沒有因mysql_real_escape_string造成的。這使得我的問題對我的情況非常獨特,對任何人都沒有太大的幫助。然而,urldecode確實解決了我的問題。

+0

不是一個選項,@Drew - 這將需要相當大的重寫。但是,謝謝。 – Doug

+0

再一次,@CharlotteDunois,這不是一個選項,因爲它將啓動應用程序的重要重建。謝謝,不過。 – Doug

回答

0

使用urldecode得到適當的HTML

+0

你在暗示'urldecode(mysql_real_escape_string($ usercontent));'? – Doug

+0

賓果!如上所述進行嘗試和測試......可以享受美食。我一直在試驗'htmlentities','html_entity_decode()','htmlspecialchars()'等,但我沒有想過使用URL編碼。謝謝:) – Doug

0

說我的用戶內容是:

$usercontent = "<p>This is my content</p>"; 

如果我使用:

mysql_real_escape_string($usercontent); 

我得到這個插入到數據庫:

%3Cp%3EThis+is+my+content%3C%2Fp%3E 

真的嗎?你不應該。正如manual說:

mysql_real_escape_string()調用MySQL的庫函數mysql_real_escape_string,其中前添加反斜槓以下字符:\ X00\ n\ r\\ X1A

你描述的逃跑必須在其他地方發生。

+0

你說得對。我覺得聞起來有點腥!這個內容實際上是通過一個jQuery腳本通過ajax發送的,該腳本將表單中的字段串聯起來。我目前無法找到這種不尋常的編碼發生在哪裏,但TBH,以前的答案解決了我的問題,所以我想我會離開它:)謝謝! – Doug

+0

@Doug:麻煩的是,如果你不知道如何/爲何/爲什麼數據正在被轉義,它可能與'urldecode()'所提供的無法完美匹配。而且,在應用mysql_real_escape_string()之前,無論如何你都應該使用'urldecode()'*。 – eggyal

+0

功能現在切換...我會進一步調查,看看我是否可以發現編碼的發生。 – Doug