写入文件时出现意外的PHP换行符

时间:2016-01-13 18:50:43

标签: php

我正在尝试创建一个基于Web的聊天室,我正在将消息存储在文本文件中。但是当写入文件时,有时行会断开并开始一个新的中间字符串,我的代码用于编写:

$_msg_file=fopen("message.txt","a");
stream_filter_append($_msg_file, 'convert.iconv.UTF-8/OLD-ENCODING');
///WRITE TO FILE
if($_SESSION["class"]==="admin")
{
    fwrite($_msg_file,"<li><b style='color:#FF9393;'>".$_SESSION["name"]."</b> ".$_POST["msg"]."</li>\n");
}else {
    fwrite($_msg_file,"<li><b style='color:black;'>".$_SESSION["name"]."</b> ".$_POST["msg"]."</li>\n");
}
fclose($_msg_file);

输出:     http://pastebin.com/0cucqbTW

我发布文字的jQuery:

var data={};
data["why"]="send";
data["msg"]=$(".box_msg").val();
if(data["msg"].length<100 && data["msg"].length>1)
{
$.ajax({
  type:"POST",
  url:"send.php",
  data:data,
  success:function(response)
  {
      $(".box_msg").val("");
  },
  error:function(response)
  {
      $("#chat").text(response);
  }
});

2 个答案:

答案 0 :(得分:0)

你所拥有的是你看不到但是在$_POST值内发送的换行符,如Marc B所述。

解决这个问题的方法是删除PHP行尾字符,它们被轻易引用为PHP_EOL

(就我个人而言,我也会引用单引号中的数组键作为双引号效果引用引用等数组值)

所以

$_POST['msg'] = str_replace(PHP_EOL, '', $_POST['msg']);
// str_replace($search,replace,subject);

这将从字符串中删除系统使用的换行符,然后再保存到文件中。您可以另外替换标准换行符[type character],例如\n\r\r实际上并不是一个真正的换行符),以防它们与{不同{1}}值:

还建议您将更改另存为另一个变量,而不是原始的POSTed数据。

PHP_EOL

答案 1 :(得分:0)

所以@Derek Pollard是对的我改变了我的代码

 $string = str_replace("\r\n","","<li><b>style='color:#FF9393;'>".$_SESSION["name"]."</b> ".$_POST["msg"]."</li>");
    fwrite($_msg_file,$string);
    fwrite($_msg_file,"\n");

通过为换行添加另一个fwrite来解决问题