如何在MySQL表中存储格式化文本?

时间:2011-07-04 17:51:56

标签: php mysql database-design types

[我的已编辑新问题]

我正在以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. 标点符号和换行符
  3. 是否有可以存储此类数据的数据类型?那些VARCHAR,TEXT和CHAR数据类型呢?请帮忙!

    例如:如果我输入以下文字:

    Hi!
    
    Hello there!
    

    然后它不应该像

    那样打印
    Hi! Hello there!
    

3 个答案:

答案 0 :(得分:8)

原始文字仅包含字符,不包括粗体,斜体或下划线等格式。标签,标点符号和换行符都是字符,所以如果你真正需要的话就是一个简单的varchar。

但是如果你想要粗体,斜体和带下划线的文本,你必须决定格式化协议:HTML,wiki语法,RTF等。如果这种格式是文本的,varchar就可以。如果它是二进制的,你需要一个blob。

如果文本中有换行符并且它显示在一行上,可能是因为您在HTML页面中输出它,其中空格字符序列(制表符,空格,换行符等)被转换为简单空格。使用<pre>your HTML-escaped text here</pre>部分,它会正确显示换行符,标签和多个空格。

答案 1 :(得分:3)

空格和标点符号 保留。

如果您没有看到它们,那么您可能输出 HTML文档中的文本并忘记将其标记为HTML:请记住,Web浏览器忽略换行符和明文中的连续空格

对于粗体格式,您需要提供一些标记文本的方式来存储格式信息。您可以考虑使用HTML或Markdown。

答案 2 :(得分:2)

我认为您可以使用 utf_encode() 进行存储。并通过 utf_decode() 获取。您可以看到PHP的 n12br 功能。

- 编辑 -

我使用 base64_encode() 进行加密,并使用 base64_decode() 会保留标签,空格和特殊字符。