2011-07-04 40 views
7

[我已編輯的新問題]如何在MySQL表中存儲格式化文本?

我正在文本輸入HTML形式<textarea>。假設用戶輸入了以下文本:

1. Hello  World 
2. Hi World 

3. Hola 

我的PHP代碼被插入到表:1. Hello World\r\n2. Hi World\r\n\r\n3. Hola

我通過使用下面的方法顯示該文本到一個DIV元件(假設$text檢索從數據庫):

<div><?php echo $text ?></div>

我得到的輸出是:1. Hello World 2. Hi World 3. Hola

如何獲得用戶輸入的確切輸出?現在只對我很重要的是空格,製表符和換行符。正如在下面的答案中提到的,不建議使用nl2br()。任何其他方式?


[我的老問題] 我想格式化文本存儲到一個MySQL表。通過格式化,我的意思是保留適當的粗體字符,斜體,下劃線,空格,製表符,標點符號,換行符等。

如果上述不可行,如果我可以保留下面的格式,那麼我的要求也滿足:

  1. 空格和製表符
  2. 標點符號和換行符

是否有可存儲這些數據的任何數據類型?那麼VARCHAR,TEXT和CHAR數據類型呢?請幫忙!

例如:如果我鍵入以下內容:

Hi! 

Hello there! 

那麼它不應該像打印

Hi! Hello there! 
+0

不是HTML,簡單的文本。我編輯了我的問題。請檢查。謝謝!! –

+0

我希望我的客戶能夠添加有關某些項目(如手機等)的評論。我希望審覈按照審覈人輸入的方式顯示。我在Mysql中使用PHP。請讓我知道是否需要更多細節。謝謝!! –

+0

「簡單文本」沒有格式。 –

回答

1

我認爲你可以utf_encode()存儲。並與utf_decode()得到它。你可以看到PHP的功能n12br

- 編輯 -

我使用加密base64_encode(),並獲得我用base64_decode()保留製表符,空格和特殊字符。

+0

我認爲你的意思是['nl2br'](http://php.net/manual/en/function.nl2br.php)。 –

+0

是的,我無意中加了一個_ –

+0

這還是錯的。它是'nl'(如NewLine),而不是'n1'。 –

3

空格和標點符號均爲保存。

如果你沒有看到他們,那麼你很可能輸出文本在HTML文檔中,並忘記它標記爲HTML:記住,Web瀏覽器忽略明文換行符和連續的空格。

至於格式化如粗體,你需要想出標記的一些方法你的文本來存儲格式化信息。你可能會考慮HTML或Markdown。

+0

感謝Tomalak。你能告訴我如何保留換行符?大膽和斜體的人物對我來說現在並不重要。 –

+0

@iSumitG:我的答案的第一行用粗體字表示,它們被保留下來。 –

+2

'nl2br()'會將'\ n'轉換爲'
',但這僅用於顯示目的。做這樣一個轉換從根本上改變了文本,所以你不會收回你放入的東西。 –

8

原始文本僅包含字符,不能格式化爲粗體,斜體或下劃線。標籤,標點符號和換行符都是字符,所以如果你真正需要的是這樣的話,簡單的varchar就可以實現。

但是,如果您想要粗體,斜體和帶下劃線的文本,則必須確定格式化協議:HTML,wiki語法,RTF等。如果此格式爲文本格式,則varchar會執行此操作。如果它是二進制的,你需要一個blob。

如果在文本中有換行符並且它顯示在一行中,可能是因爲您在HTML頁面中輸出它,其中空格字符序列(製表符,空格,換行符等)被轉換爲簡單空間。使用<pre>your HTML-escaped text here</pre>部分,它將正確顯示換行符,製表符和多個空格。

相關問題