2017-05-30 26 views
0

根據這個答案https://stackoverflow.com/a/2115554/2311074我認爲json_encode是否存儲換行符爲\n\r\n取決於操作系統。不過,我今天發現,我可以在同一個操作系統(Ubuntu)上同時生成json_encode的輸出。.serialize()方法將 r添加到換行符中?

考慮例如

<form id='form'> 
    <textarea id='amd' name='stuff'></textarea> 
    </form> 
    <button id='lol'>Press Me</button> 

與jQuery

$(document).ready(function() { 
    $('#lol').click(function(){ 
    var text = $('#amd').val(); 

    $.ajax({ 
      type: "POST", 
      url: ajax.php, 
      data: {stuff: text} 
     }); 
}); 

和以下ajax.php

$text = $_POST['stuff']; 
file_put_contents('test.txt', json_encode($text)); 

現在輸入以下

enter image description here

會寫在text.txt

以下內容: 「這是一個\ nbreak了」

但是,如果我改變在jQuery腳本的數據attribut到

data: $('#form').serialize() 

然後我找到text.txt

中的以下內容

「這是一個\ r \ nbreak了」

爲什麼連載()產生這種額外\r到我的換行符\ n嗎?我甚至不使用Windows。

+0

客戶端和服務器都是Ubuntu? – Mat

+0

爲什麼idk,但如果是這種情況唯一的解決方案將是:'file_put_contents('test.txt',str_replace('\ r \ n',PHP_EOL,json_encode($ text)));' – Xorifelse

+0

@Mat yes 。我在ubuntu上使用Xampp,因此客戶端和服務器甚至完全相同。我也嘗試過使用不同的Ubuntu和Win 7客戶端的真實Ubuntu服務器,結果相同。 – Adam

回答

1

所以答案很簡單。 jQuery serialize()正在添加\r\n,因爲它的開發人員將其編碼爲這樣。您可以在jquery github中查看代碼。它們用\r\n代替/\r?\n/g的所有事件。

相關問題