簡體   English   中英

使用PHP在MySQL中存儲HTML的編碼問題

[英]Encoding issue storing HTML in mySQL using PHP

我已經構建了一個允許將HTML存儲在數據庫中的CMS。 這一切都非常簡單。 我使用htmlspecialchars在textarea中顯示HTML以防止它破壞表單。 然后使用html_specialchars_decode將其保存回去。 除非有人將一些HTML粘貼到系統中而不是鍵入內容,否則一切似乎都可以正常工作。 此時它存儲得很好但丟失了大部分空白,這意味着所有可愛的縮進都必須從頭開始。

為了修復它,我嘗試用utf-8編碼指定所有內容,因為任何試圖擺弄它似乎產生無效字符。

我在PHP標頭中指定utf-8

header('Content-Type: text/html; charset=utf-8');

我在HTML頁面中指定了utf-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

我在HTML表單中指定了utf-8

<form accept-charset="utf-8" 

然后,我大致讀取了發布的值,如下所示:

$Val = $_POST[$SafeFieldName];

我的理解是PHP在utf-8中做了所有事情所以我在這個階段有點驚訝我得到了gobbledegook - 除非我現在這樣做:

$Val = utf8_decode($Val);

所以,在這個階段 - 它的工作 - 有點。 我松開了所有可愛的縮進,但不是我的所有空白。 好像有一些非utf8字符被剝離了。 奇怪的是我在使用Chrome但在Firefox中看起來很好

我想我現在只是打結自己。 任何優雅的建議? 我需要深入了解這一點,而不是只是破解它才能讓它發揮作用。

與數據庫和數據庫表本身的連接應支持UTF-8。 確保表的排序規則為utf8_general_ci,並且表中的所有字符串字段也具有utf8_general_ci排序規則。

數據庫連接也應為UTF-8:

mysql_set_charset('utf8');

有關更多信息,請參見http://akrabat.com/php/utf8-php-and-mysql/

更新:一些報告

mysql_query('SET NAMES utf8');

有時也需要!

如果無法創建表和連接UTF-8,您當然可以將HTML保存為BASE64編碼數據,並在再次從DB中檢索時將其解碼回來。

檢查DataBase連接編碼,並檢查存儲HTML的DataBase表字段編碼。 也許那里的編碼不同於UTF-8

如果這是進出MySQL的問題(如標題中所建議),則需要確保列和表為UTF8-BIN並放入mysql_set_charset('utf8'); 打開與MySQL的連接后。

排序 - 答案真的很尷尬 - 但你永遠不知道,有一天有人可能需要這個:)

我注意到它在Firefox中的工作方式有所不同(但仍然很垃圾),因此我查看了樣式表並發現了這一點:

white-space: nowrap;

有人(我)必須把它放在那里試圖讓水平滾動在某些瀏覽器中工作。 如果沒有這個,HTML就會讓它一直到數據庫並再次返回。

我唯一的另一個問題是為什么我需要這個,因為整個事情本應該到達utf8

$ Val = utf8_decode($ Val);

神奇地-現在我不需要了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM