2016-01-13 108 views
0

我正在嘗試創建基於Web的聊天室,並將消息存儲在文本文件中。但寫入文件時,有時會行剛剛打破,並開始一個新的中間串,我的代碼書寫:寫入文件時出現意外的PHP換行符

$_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

任何機會,在'$ _ POST [消息字符串「msg」]'包含換行符? – sal

+0

它不,我嘗試了多個文本,你看到 – Augustinas

+1

嘗試使用這個整個fwite數據:'$ string = str_replace(「\ r \ n」,'',$ string);' – Derek

回答

0

你有什麼是斷行字符,你不能看到,但正在與$_POST值內發送,由馬克·B.

提到

解決此問題的方法是刪除PHP尾部字符,這些字符被簡單引用爲PHP_EOL

(我個人也將引用在單引號爲雙引號效果引用參考文獻和如數組值內數組鍵)

所以

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

這將去除系統中使用的線從斷開字符串,然後才能保存到文件中。你還可以替代標準的斷行[字符類型] S如\n\r\r實際上不是斷行本身,完全一致)的情況下,他們是從PHP_EOL值不同:

還建議您保存更改作爲另一個變量而不是原始的POST數據。

$breaks = array("\n","\r",PHP_EOL); 
$strippedMessage = str_replace($breaks, '', $_POST['msg']); 
0

所以@Derek波拉德是對的,我改變了我的代碼是

$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線路打破它解決了這一問題

相關問題