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

11

[我的编辑的新问题]

我正在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!

请将以下与编程有关的内容从英语翻译成中文。仅返回翻译后的文本即可,不需要HTML标签。 - sumit
我希望我的客户能够添加有关某些物品(如手机等)的评论。我希望评论按照评论者输入的原样显示。我正在使用PHP和Mysql。如果需要更多细节,请告诉我。谢谢! - sumit
"simple text" 没有格式。 - Lightness Races in Orbit
你在网页上使用什么富文本编辑器? - Karolis
我尝试使用预格式标签,就像“JB Nizet”的答案所说的那样,它有效。 - user3150566
显示剩余2条评论
3个回答

10

原始文本仅包含字符,没有加粗、斜体或下划线等格式。制表符、标点符号和换行符都是字符,所以如果你只需要这些,那么一个简单的varchar就可以了。

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

如果您的文本中有换行符,但在显示时只显示为一行,则可能是因为您在HTML页面中将空格字符序列(制表符、空格、换行符等)转换为简单空格。请使用<pre>您的HTML转义文本</pre>部分,它将正确地显示换行符、制表符和多个空格。


3
我认为您可以使用 utf_encode() 来存储数据,并使用 utf_decode() 来获取数据。您可以查看 PHP 中的 n12br 函数。
-- 编辑 --
我使用 base64_encode() 进行加密,使用 base64_decode() 进行解密。 制表符、空格和特殊字符都会得到保留。

2
Base64编码与这个问题有什么关系? - JB Nizet
通过base64编码,您可以保留原始文本中的制表符、空格、特殊字符等更多细节。这个函数易于加密和解密。 - Bruno Alano
@Bruno Alano:你说的话毫无意义。Base64对于将二进制存储为ASCII很有用,但它并不能保留比原始文本更多的内容。而且它不是加密:它只是编码。任何人都可以解码Base64编码的数据。要解密加密数据,您需要拥有一个秘密密钥。 - JB Nizet

3

空格和标点符号是保留的。

如果您看不到它们,那么可能是因为您在HTML文档中输出文本时忘记将其标记为HTML:请记住,Web浏览器会忽略纯文本中的换行符和连续空格。

至于加粗之类的格式,您需要想出一种方法来标记您的文本以存储格式信息。您可以考虑使用HTML或Markdown。


@iSumitG:正如我的回答的第一行所说,用粗体字标出来的,它们是被保留下来的。 - Lightness Races in Orbit
2
nl2br()函数将把\n转换为<br>,但这只是为了显示目的。这样做会从根本上改变文本,因此您将无法得到您输入的内容。 - Marc B
@MarcB:我没有推荐使用 nl2br - Lightness Races in Orbit
你必须像Marc B说的那样使用HTML标签来存储。 - macwadu
@macwadu:你是可以存储HTML标签,并将其用作格式化的表示。我说过你不必这样做,而Marc也没有说过你必须这样做。你可以选择任何喜欢的格式化方案。 - Lightness Races in Orbit
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接