【问题标题】:Why is textarea filled with mysterious white spaces?为什么 textarea 充满了神秘的空白?
【发布时间】:2011-01-13 06:21:43
【问题描述】:

我有一个简单的text area,格式如下:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
    <?php if($siteLink_val) echo $siteLink_val; ?> 
</textarea>

我在这个 textarea 中不断获得额外的空白。当我进入它时,我的光标就像在 textarea 的中间而不是在开头?有什么解释?

【问题讨论】:

  • 正如所有赞成的答案中明确定义的那样,tldr;这种行为是在桌面客户端浏览器窗口中。这取决于 DOM 解释器如何处理它,但任何多余的空格都是空格/cmets - 但它们仍然包含在 HTML 渲染器中。因此,换行符/空格,将 &lt;?php?&gt; 组合到下一个定义的 DOM 元素(

标签: php html forms textarea


【解决方案1】:

除此之外:

之前:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
    <?php if($siteLink_val) echo $siteLink_val; ?> 
</textarea>

之后:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo $siteLink_val; ?></textarea>

我也添加了PHP的trim()方法:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo trim($siteLink_val); ?></textarea>

【讨论】:

    【解决方案2】:

    只需将所有内容放在 一行

    <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo $siteLink_val; ?></textarea>
    

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题,解决方法很简单:不要另起炉灶!前面的一些回答虽然可以解决问题,但是思路没有说清楚。 重要的理解是,为了摆脱不想要的空格,永远不要在你的开始标签之后开始新的一行。

      以下方式是错误的,会在你的文字内容前留下很多不需要的空格:

       <textarea>
          text content // start with a new line will leave a lot of unwanted spaces
       </textarea>
      

      正确的做法是:

       <textarea>text content //put text content right after your start tag, no new line
       </textarea>
      

      【讨论】:

      • 好的,但是为什么 Laravel 不修剪那个空白?
      • 致迷彩:空间在某些平台上被修剪,但在其他平台上没有。在某些平台上,旧版本可能不会修剪空格,而新版本可能会这样做。即使在某些相同的版本中,这也取决于。但是,当您遇到问题时,上述方法是解决问题的方法之一。
      • 我不明白。我有 Laravel 8,它是一样的。我认为 trim() 应该是平台无关的。
      • 对不起迷彩。那是一年半以前的事了,我忘记了问题的背景。无论如何,如果您有问题,上述是解决问题的方法之一。
      • @WilliamHou,是的,无论你建议什么都对我有用,TQ
      【解决方案4】:

      只需在同一行中定义您和您的结束标签。

      <textarea class="form-control"
                id="newText"
                rows="6"
                placeholder="Your placeholder here..."
                required
                name="newText"></textarea>
      

      【讨论】:

        【解决方案5】:

        我知道已经晚了,但可能会帮助其他人。

        在需要文档缩进时使用它。

        $('document').ready(function()
        {
            $('textarea').each(function(){
                    $(this).val($(this).val().trim());
                }
            );
        });
        

        same question

        【讨论】:

        • 或者你可以正确格式化你的html。但是我确实同意,如果您想要其中的 php 代码之类的东西,那可能会很困难。所以我同意你的回答。
        【解决方案6】:

        textarea 开始标签和结束标签之间的任何空格都将被视为空格。所以对于你上面的代码,正确的方法是:

        <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo $siteLink_val; ?></textarea>
        

        【讨论】:

          【解决方案7】:
          <textarea style="width:350px; 
           height:80px;" cols="42" rows="5" name="sitelink"
           ><?php if($siteLink_val) echo $siteLink_val; ?></textarea> 
          

          Moving ...> 向下对我有用。

          【讨论】:

            【解决方案8】:

            如果你还喜欢使用缩进,在打开&lt;?php标签之后再做,像这样:

            <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php // <--- newline
                if($siteLink_val) echo $siteLink_val; // <--- indented, newline
            ?></textarea>
            

            【讨论】:

              【解决方案9】:

              简而言之: &lt;textarea&gt; 应该在它开始的同一行立即关闭。


              一般做法:这将在代码中添加用于缩进的换行符和空格。

              <textarea id="sitelink" name="sitelink">
              </textarea>
              

              正确做法

              <textarea id="sitelink" name="sitelink"></textarea>
              

              【讨论】:

              • 解决了我的问题。
              • 这对我来说也是完美的解决方案
              • 解决了我的问题,很好的解决方案。谢谢
              • 像魅力一样工作!
              【解决方案10】:

              对我有用的一个解决方案是将样式 white-space: normal; 添加到 textarea 因为有时消除所有空格是不可行的(例如,当您希望代码遵守需要添加选项卡的编码准则时, 空格和换行符)

              请注意,textarea 的默认值,至少在 chrome 中是: white-space: pre-wrap;

              【讨论】:

                【解决方案11】:

                基本上应该是这样的

                <textarea>something here with no spaces in the begining</textarea>
                

                如果有一些预定义的空格,可以说是由于下面的代码格式

                <textarea>.......
                ....some_variable
                </textarea>
                

                点显示的空格会在每次提交时不断添加。

                【讨论】:

                • 这是一个古老的“把戏”,甚至有时会被遗忘。基于此,我们已经遇到了 HTML 问题,可以追溯到 IE6/7 .. +1
                • 拯救了我的一天。谢谢!
                • 它工作得很好,但它真的很有趣。关于这个奇怪的错误有什么解释吗?
                • 如何在此设置中注释占位符、值、方法等?我需要一个占位符,但我的标签需要在
                【解决方案12】:

                另一种解决方法是使用 javascript:

                //jquery
                $('textarea#someid').html($('textarea#someid').html().trim());
                
                //without jquery
                document.getElementById('someid').innerHTML = document.getElementById('someid').innerHTML.trim();
                

                这就是我所做的。删除代码中的空格和换行符会使行太长。

                【讨论】:

                  【解决方案13】:

                  文本区域显示神秘空间,因为标签中存在真实空间。 &lt;textarea&gt; &lt;php? echo $var; ?&gt; &lt;/textarea&gt; 删除标签之间的这些额外空格后将解决问题,如下所示。 &lt;textarea&gt;&lt;php? echo $var; ?&gt;&lt;/textarea&gt;

                  【讨论】:

                    【解决方案14】:

                    保留文本区域代码,内部没有额外的空格

                    此外,如果您看到多余的空行 元语言有解决方案:

                    <textarea>
                    for line in lines:
                    echo line.replace('\n','\r')
                    endfor
                    </textarea>
                    

                    它将打印没有额外空行的行 当然,这取决于您的行是否以 '\n'、'\r\n' 或 '' 结尾 - 请适应

                    【讨论】:

                      【解决方案15】:

                      此外:textarea 标签在多行代码中显示新行、制表符等的空格。

                      【讨论】:

                        【解决方案16】:

                        请确保后面没有换行符或空格,这是为了确保没有空格或制表符,只需复制并粘贴此代码即可:)我已经为您修复了它

                        <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo trim($siteLink_val);?></textarea>
                        

                        【讨论】:

                          【解决方案17】:

                          我反对 HTML 代码与 PHP 代码混合。

                          不过试试这个:

                          <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
                          <?php 
                              if($siteLink_val) 
                                  echo trim($siteLink_val);
                          ?> 
                          </textarea>
                          

                          【讨论】:

                          • 几乎...仍然包括两个换行符。
                          • 应该使用&lt;textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"&gt;&lt;?php?&gt;&lt;/textarea&gt; 以确保它是真正的纯净。另外,请问您为什么反对使用 PHP 编写 HTML?
                          【解决方案18】:

                          首先确保您的 $siteLink_val 没有将空格作为值返回。

                          为了使代码绝对干净,我建议您可以这样做,以便以后有更多的灵活性。我创建了一个函数,如果变量不存在(您似乎在原始帖子中的目标),则返回 NULL,否则返回绝对值。一旦你确定了你的变量的内容,试试这个:

                          function build_siteLink_val() {
                               if ( $siteLink_val ) {
                                    return $siteLink_val;
                               }
                          
                               else {
                                    return "";
                               }
                          }
                          
                          $output_siteLink_val = build_siteLink_val();
                          

                          您的文本区域中的以下代码现在将变为:

                          <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?=$output_siteLink_val?></textarea>
                          

                          这是假设您的 PHP 安装配置为使用简写变量调用,如缩短的“=?>”标签所示。如果您不能以这种方式输出,请记住在您的 PHP 代码前加上“”结束。

                          避免

                          另外,检查您的 CSS 以确保没有向内推动文本的填充规则。

                          此外,您可以在文本区域中指定 cols 和 rows 值,然后设置宽度和高度的样式。这些规则适得其反,并且会导致视觉效果不一致。坚持通过样式定义大小(我建议给元素一个类)或行/列。

                          【讨论】:

                            【解决方案19】:

                            此外,当您说光标位于文本区域的“中间”时,我认为您还可以在 CSS 中的某处定义额外的填充或 text-align: center .

                            【讨论】:

                              【解决方案20】:

                              为了让它看起来更简洁,考虑使用三元运算符:

                              <textarea><?=( $siteLink_val ? $siteLink_val : '' );?></textarea>
                              

                              【讨论】:

                              • 不要使用短标签,不要建议其他人这样做。这将帮助人们在将一些 web 应用程序放在具有不同配置的生产服务器中时避免 PITA。谢谢。
                              • 我总是在模板场景中使用短标签,正是因为我希望更多的人使用它们,从而鼓励 PHP 社区继续支持它们。也就是说,短标签应该只在模板场景中使用,绝不能在应用程序逻辑中使用,而且很明显,只有当服务器支持它们时。在部署之前始终了解您的生产环境。 (当然,这里不是讨论短标签优缺点的地方,但你提出来了,所以这是我的理由。)
                              【解决方案21】:

                              textarea 标签之后和之前打开(和关闭!)您的 PHP 标签:

                              <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php
                                if($siteLink_val) echo $siteLink_val;
                              ?></textarea>
                              

                              【讨论】:

                              • 这是在这些情况下保持缩进的巧妙方法。谢谢!
                              • 这终于解决了我的问题。非常感谢巴特
                              • 太棒了。如果您希望在刀片文件中保持一致的缩进,这非常有用。
                              【解决方案22】:

                              仔细查看您的代码。其中,&lt;/textarea&gt; 之前已经有三个换行符和大量空格。首先删除那些,以便标签之间不再有换行符。它可能已经成功了。

                              【讨论】:

                              • @user79685 不客气。阅读我上面的新评论,我并不是真的在嘲笑你。至少不是以卑鄙的方式:)
                              • 嗯,我不同意。我非常喜欢在线讨论中的机智和礼仪,并且我喜欢 SO 的整体非常友好的语气。另一方面,一个人在网上走动时需要开发一点皮肤,这是真的。
                              • 非常好。我也遇到了这个问题,并尝试了从修剪文本到应用'text-index'属性(使用css)的所有其他技巧:-D :-D。 (我真傻)。出现问题是因为我在 html 中缩进了代码:-?...谢谢,您的回答也对我有帮助.. :-)
                              • 另外,使用value 属性而不是在标签内添加文本。
                              • 一个老歌,但一个好人。这帮助了我今天。 @Pekka 你太棒了!
                              【解决方案23】:

                              好吧,&lt;textarea&gt;&lt;/textarea&gt; 之间的所有内容都用作您的 textarea 框的默认值。您的示例中有一些空格。尝试消除所有这些。

                              【讨论】:

                              • 非常感谢。我没有意识到介于两者之间的所有内容都是默认设置。我选择了最上面的那个人,因为他先回答了,尽管他嘲笑我。感谢大家的支持。
                              • 很简单。非常感谢!
                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-02-13
                              • 1970-01-01
                              • 1970-01-01
                              • 2016-05-19
                              • 2019-12-30
                              • 1970-01-01
                              相关资源
                              最近更新 更多