【问题标题】:How to wrap text when inporting from MySQL database, not before?从 MySQL 数据库导入时如何包装文本,而不是之前?
【发布时间】:2016-03-18 09:37:54
【问题描述】:

我遇到了与导入文本的换行有关的问题,该文本之前使用经典的 PHP - HTML 表单方法插入 MySQL。

问题如下。我想将保存在 MySQL 数据库中的文本加载到我网页的“新闻”部分。问题是我的网页有一个PC版和一个手机版,每个都有不同的宽度。

所以,当我将文本提交到 MySQL 时,我不想插入换行符(我的意思是如果文本行宽超过了典型的“cols”宽度,表单将提交的换行符,假设我会做一个“物理”或“硬”换行;手动插入的换行符以分隔我当然要保留的段落)因为据我所知,您必须指定“cols”,这是一个告诉宽度的参数换行之前的行数。

这并不有趣,因为我的“新闻”部分的文本字段会有不同的宽度,正如我告诉过你的,所以从 MySQL 导入带有换行符的文本不会调整两个不同的“新闻”大小我的网站。

我需要的是不带换行符的情况下将文本上传到 MySQL,然后让我的网络中的两个“新闻”部分对文本进行格式化。

虽然这很容易,因为我只是将 MySQL 数据库中保存的文本解析为具有指定宽度的 <div> 标记。但问题是文本每次都会溢出<div> 容器宽度。

这是我在 HTML 表单中用作文本输入的内容:

<textarea name="STORY" wrap="physical">EXAMPLE</textarea> 

为了在 MySQL 中注入新闻,我使用了典型的 PHP:

$var = "INSERT INTO exampleTable ('story') VALUE ($_POST['STORY']);

为了加载保存的文本,我只是在 div 标签之间回显了一个从 MySQL 数据库的故事字段中导入文本的变量的值:

echo "<div>".$story."</div>";

如您所见,因为我不想在 MySQL 中从 from 插入文本时使用“硬”换行,以避免在超出“cols”的行中插入换行符宽度,我使用“物理”换行,但我没有指定“cols”,所以我认为这应该防止表单插入我手动执行的换行符(按“enter”键)。

但是,当我回显它时,生成的文本会溢出我的 div 宽度,正如我之前告诉过你的那样。

div 宽度不应该将文本包裹在自身内部吗?

我应该从表单中删除wrap="physhical" 属性吗?

【问题讨论】:

  • 使用cols 不会在提交的数据上神奇地插入换行符。你在说什么换行符?
  • 嗨哟西。你说的对。我说的是如果提交的文本超过了流行的“cols”宽度,“wrap”属性将插入的换行符。但是,我想保留手动插入的 libe-breaks 以保存段落。
  • 这就是我的意思。你不必做任何事情。文本将包含手动输入的那些换行符。不考虑 textarea-element 的配置。这意味着,在您的数据库中,您只会有前面提到的换行符。如果您在 &lt;div&gt; 或类似名称中显示该文本,它将跨越整个可用宽度。要使有意识的换行符可见,只需在输出文本时使用nl2br。为了回答您添加的问题,是的,无论如何不要在表单上使用任何花哨的属性。

标签: php mysql text line-breaks word-wrap


【解决方案1】:

首先,请注意,您插入数据库很可能是不安全的,并且可能会导致 SQL 注入。

要删除每个换行符,您可以这样做:

echo "<div>".str_replace("\n", "", $story)."</div>";

【讨论】:

  • 我打算发布相同的 :) 但是,我不会靠近 cols 来确定 textarea 字段的宽度,尤其是因为这可能是动态的。使用 css 和 width
  • 是的,这就是我不使用“cols”的原因。但是无论我是否使用 css 指定宽度,生成的文本都会超出
    的宽度。这就是问题所在。
  • 您好。只是想感谢您的回答 blue112。我按照您的示例并使用一些代码来处理换行符,替换字符串中的 \n 。我使用了“htmlspecialchars”,然后使用了“str_replace”,就做到了。从现在开始,我可以完美地检索我的换行符。顺便说一句,我的“pre”标签(我没有在我的帖子中写但在原始代码中)正在与我尝试包装呈现的文本进行激烈的斗争。因此,如果有人遇到同样的问题,首先不要使用“pre”标签来呈现检索到的文本。
【解决方案2】:

您可以尝试在 MySQL 中使用 TRIM() 函数来处理这个问题:

INSERT INTO exampleTable ('story') VALUE TRIM(TRAILING '\n' FROM $_POST['STORY'])

【讨论】:

    【解决方案3】:

    您不应该自己插入换行符 - CSS 可以为您做到这一点。 Here 是一个 SO 答案,似乎可以完成您可能想做的所有事情。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签