【问题标题】:Whitespaces around PHP tags causing ajax calls to have extra whitespacesPHP标签周围的空格导致ajax调用有额外的空格
【发布时间】:2013-06-01 15:35:19
【问题描述】:

我有一个小问题困扰了我很长一段时间,但我自己似乎无法解决。我用谷歌搜索并没有真正找到任何有用的东西。我想,也许其他人遇到了这个问题,或者将来会遇到它,所以我们可以互相帮助。

问题; 我制作了一个下拉列表,其中包含项目。在此下拉列表下有一个文本区域。当用户从下拉列表中选择一个项目时,其内容被加载到 textarea 中。当我向文本区域添加一些文本时,只要我按空格键或输入,它就会自动保存。然而问题是,PHP 似乎在文本之前添加了 2 个换行符。我做了一些截图来说明这一点。

  1. 第一张图片显示了 Mysql 数据库中的文本。
  2. 您可以看到,在 textarea 中显示内容时,它以某种方式跳过了前 2 行。记事本外观只是我在 textarea 中设置的背景图片。
  3. 向其中添加一些文本并按空格键后,它会保存内容,而在 Mysql 中它会跳过第一行。
  4. 在内容文本区域中,它会跳过一行,如您在图像中看到的那样。

截图:http://s9.postimg.org/suh6u3a7j/1234.png

有人知道为什么会这样吗?我该如何解决?

这是一些代码;

<script>
  $(function(){
  $("textarea[id='projectcontent']").keypress(function(e) {
      //13 maps to the enter key
      if (e.keyCode == 13 || e.which == 13 || e.keyCode == 32 || e.which == 32 || e.keyCode == 8 || e.which == 8) {
          saveContent();
      }
  });
});

<script>
        function getContent()
        {
            var mail = $("#email").val();
            var project = $("#projects").val();

            $.ajax({
                type : "POST",
                url : "/includes/projects.php",
                data : "project=" + project+  "&email=" + mail+ "&mode=get",
                success : function(result)  {  $("#projectcontent").val(result);  }
            });
        }
    </script>

<script>
        function saveContent()
        {
            var mail = $("#email").val();
            var project = $("#projects").val();
            var projectcontent = $("#projectcontent").val();

            $.ajax({
                type : "POST",
                url : "/includes/projects.php",
                dataTyp: 'html',
                data : "project=" + project+  "&email=" + mail+ "&projectcontent=" +projectcontent+ "&mode=save",
                success : function(result)  {  $("#response").val(result);  }
            });
        }
    </script>

还有下拉和textarea

<div id="project">
        <?php
        $projects = new project();
        $projects = $projects->getProjects($_SESSION['user']);?>
        <form><select id="projects" onchange="getContent()"><option>Select project</option>
            <?php
            foreach($projects as $project)
            {?>
                <option value="<?php echo $project['id'];?>"><?php echo $project['name']; ?></option>
            <?php
            }
            ?>
        </select><input type="hidden" id="email" value="<?php echo $_SESSION['user']; ?>" /></form><span id="response"></span><br /><textarea id="projectcontent" onkeydown="enterkey()"></textarea>
        </div>

以及保存内容的PHP代码。

//set project content
public function setProjectContent($projectid, $email, $projectcontent) {
    $spc    =   $this->db->prepare('update projects set content=? where id=? and owner=?');
    $spc->execute(array(trim($projectcontent, ""), $projectid, $email));
    if ($spc->rowCount()==1){
        $message = "Saved";
    }
    else {$message = "Not saved";}
    return $message;
}

以及获取内容的 PHP 代码。

//get project content
public function getProjectContent($projectid, $email) {
    $this->projectid= $projectid;
    $this->email = $email;
    $gpc    =   $this->db->prepare('select content from projects where id=? and owner=?');
    $gpc->execute(array($projectid, $email));
    $result =   $gpc->fetch();
    $content = $result['content'];
    return $content;
}

编辑:好的,问题解决了。这可能对其他人有用; 问题只是我在一个包含文件中有一些空格。删除空格解决了这个问题!

【问题讨论】:

  • 如果您想删除代码中的前导和/或后面的“不可见”字符,请使用 trim
  • Trim 在这种情况下不做任何事情。
  • 我们也可以看看你的 PHP 代码吗?
  • 你是否 100% 认为它与 CSS 边距或填充无关?
  • 能否提供设置textarea内容的代码?

标签: php ajax whitespace


【解决方案1】:

很长一段时间,但我认为您的 PHP 代码(具有 AJAX 功能或其中之一的代码)可能在 &lt;php 标记(或其他地方)前面有白线。

更改 ajax 代码调用的 php 方法,使其返回硬编码值。当你再次测试它时,你可以确定它不是内部逻辑,看看线条是否还在。示例:

//get project content
public function getProjectContent($projectid, $email) {
    $this->projectid= $projectid;
    $this->email = $email;
    $gpc    =   $this->db->prepare('select content from projects where id=? and owner=?');
    $gpc->execute(array($projectid, $email));
    $result =   $gpc->fetch();
    $content = $result['content'];
    return "test on first line";
}

编辑:对于在 php 文件中寻找空格的人,我制作了一个正则表达式,可以找到它们 (\s\&lt;\?)|(\?\&gt;\s)

【讨论】:

  • 我这样做了,它仍然跳过了前两行。
  • 那么你应该检查你的 PHP 文件,它们可能在文件的开头或结尾有空格。还要检查包含
  • 你是对的。我完全忘记了包含文件的开头有空格。谢谢!
  • 很高兴听到您解决了问题!
【解决方案2】:

$("#projectcontent").val(result); 这是将值设置为 textarea 的代码,对吗?然后你可以innerHtml() js 函数代替。 此外,在保存 textarea 内容的同时,您还可以使用$.trim($var) 功能进行修剪。

【讨论】: