Reputation: 11
I am trying to make a web based chat room and I am storing messages in a text file. But when writing to the file sometimes the line just breaks and starts a new one mid-string, my code for writing:
$_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);
Output: http://pastebin.com/0cucqbTW
My jQuery for posting text:
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);
}
});
Upvotes: 0
Views: 356
Reputation: 22760
What you have is linebreak characters that you can't see but that are being sent within the $_POST
value, as mentioned by Marc B.
The work around to this is to remove the PHP End of Line Characters, which are handily referenced as PHP_EOL
.
(Personally I would also reference array keys in single quotes as double quotes effects quote references and such within the array values)
So
$_POST['msg'] = str_replace(PHP_EOL, '', $_POST['msg']);
// str_replace($search,replace,subject);
This will remove system used line breaks from the string, before you can then save to the file. You can additionally replace standard line break [type character]s such as \n
and \r
(\r
is not actually a linebreak as such, exactly) in case they're different from the PHP_EOL
value :
Also suggested you save the changes as another variable rather than the original POSTed data.
$breaks = array("\n","\r",PHP_EOL);
$strippedMessage = str_replace($breaks, '', $_POST['msg']);
Upvotes: 1
Reputation: 11
So @Derek Pollard was right i changed my code to be
$string = str_replace("\r\n","","<li><b>style='color:#FF9393;'>".$_SESSION["name"]."</b> ".$_POST["msg"]."</li>");
fwrite($_msg_file,$string);
fwrite($_msg_file,"\n");
By adding another fwrite for line break it fixed the problem
Upvotes: 0