【问题标题】:How to add a line instead of a space when pressing enter in textarea?在textarea中按Enter时如何添加一行而不是空格?
【发布时间】:2021-01-30 14:09:47
【问题描述】:

我有一个textarea 表单,当用户按下enter 时会显示新行,但是作为$_POST 变量,它将enters 保存为空格。如何更改此设置,以便当用户按下 Enter 键时,它会在 textarea 中插入一个不间断的空格,而不是单个空格?

例子:

document.onPresskeySpace(insertBrElementInTextarea);

对于不知道文本区域长什么样的人,这是我的表单:

<form method="POST" action="process-page.php">
              <input autocomplete="off" style="height: 60px; width: 95%; margin-left: 2.5%; box-sizing: border-box" class="form-control" type="text" name="name" placeholder="name"><br>
              <textarea autocomplete="off" required="" style="min-height: 50px; max-height: 275px; width: 95%; margin-left: 2.5%; box-sizing: border-box" class="form-control" name="msg"></textarea><br>
              <button style="width: 95%; margin-left: 2.5%; box-sizing: border-box" type="submit" name="submit" class="btn btn-dark">Publish</button>
            </form>

【问题讨论】:

  • 您想通过添加不间断空格来添加一行吗?这没有任何意义
  • 显示一些代码将是一个很好的起点
  • 不,它没有,一个不间断的空格防止换行
  • 不,它不是:它在名称 NON-BREAKING 空间中。它不会产生/插入换行符。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: php html textarea


【解决方案1】:

也许你想使用nl2br()

【讨论】:

    【解决方案2】:

    实际上,他们并没有将“enter”保存为“空格”,而是将其保存为“\n”(换行)

    -- https://en.wikipedia.org/wiki/Newline#In_programming_languages

    这对某些人来说很困惑,因为这个字符没有显示在数据库软件或 phpmyadmin 中。

    我有一个建议。

    如果你想使用 php 在你的网页中显示它,你可以随时将这个字符 (\n) 更改为 &lt;br/&gt;

    ...
    <php echo str_replace("\n", "<br/>", $your_variable); ?>
    ...
    

    【讨论】:

      【解决方案3】:

      为了澄清目的

      不间断空格不是您应该使用不间断空格的术语(html 实体:&amp;nbsp;)不插入换行符。它的作用正好相反:即它可以防止两个单词之间换行......

      例如,假设你想确保一个人的名字不会在中途换行,尽管你会使用类似的东西:

      firstname&nbsp;lastname
      

      在这种情况下,全名总是在一行;如果它的任何部分需要分解到一个新行,那么整个将被放置在新行上。

      示例

      // Given the string
      Hello there, my name is James&nbsp;Mason
      
      // If the line limit is 30 characters (i.e. part way through the name then it'll output as
      Hello there, my name is 
      James&nbsp;Mason
      
      // If the string were not to have a non-breaking space
      Hello there, my name is James Mason
      
      // The output would be
      Hello there, my name is James
      Mason
      

      更多信息可以在这里找到:

      Wikipedia: Non-breaking Space

      如何解决

      假设您正在将文本输入到表单中的标准文本区域:

      <form method="post" action="">
          <textarea name="inputText"></textarea>
          <input type="submit" value="Send Text">
      </form>
      

      然后,当您按下回车键(如@HaniefHan 所述)时,输入的字符是\n,您通常看不到 并且 在 HTML 中不会输出。例如:

      echo "this is a
      sentence that spans
      over multiple lines";
      

      将在一行输出:

      这是一个跨越多行的句子

      但是,如果您:

      1. 看页面源代码
      2. 输出&lt;pre&gt;标签内的文本

      但是,由于我们倾向于在 html 标签内输出文本数据(例如&lt;div&gt;...&lt;/div&gt;),它会全部显示在一行上;假设屏幕宽度大于文本长度。

      如果您想在 HTML 中显示换行符,则需要将 \n 替换为 &lt;br&gt;,或者根据您的用例,使用 &lt;p&gt;(或替代标签)包裹段落。

      // Using the example form from earlier
      echo str_replace("\n", "<br>", $_POST["inputText"]);
      

      完整的代码示例

      echo "
          <form method='post' action=''>
              <textarea name='inputText'></textarea>
              <input type='submit' value='Send Text'>
          </form>
      ";
      
      echo str_replace("\n", "<br>", $_POST["inputText"]);
      // OR
      # echo nl2br($_POST["inputText"]);
      

      输入文字:

      This is text with
      multiple lines
      of
      input text.
      

      原始输出:

      This is text with<br>multiple lines<br>of<br>input text.
      

      显示为:

      这是具有
      多行

      输入文本的文本。

      【讨论】:

      • @user838018 对,如果你有一个标准的文本区域,这确实工作。如果您还没有尝试实际向我们展示代码?...我已经为您提供了代码以证明这确实有效
      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      相关资源
      最近更新 更多