2013-12-20 91 views
0

我試圖保存一個字符串,並且數據與我不想在數組結尾的東西進來。php刪除括號後的所有內容

["bunch", "of", "stuff"]unwantedtext 

我正在努力擺脫右括號後的所有內容。這是我最近的嘗試。我最終得到一個空文件。

$toPost = substr($str, 0, strrpos($str, '\]')); 

也許我的逃生工作不正常?我也嘗試過雙引號。

這是對原始問題的更新。

這是我的javascript功能:

goalChange = function() { 
    var i, key, len, postThis; 
    key = void 0; 
    postThis = {}; 
    i = 0; 
    len = localStorage.length; 
    while (i < len) { 
    key = localStorage.key(i); 
    postThis[key] = "" + localStorage.getItem(key); 
    i++; 
    } 
    postThis.goals = localStorage.getItem("goals"); 
    postThis.userid = username; 
    return $.ajax({ 
    url: "goalChange.php", 
    type: "POST", 
    data: postThis, 
    success: function(response, textStatus, jqXHR) { 
     return console.log("Yay, the save worked!"); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     return console.log("Didn't work so good..."); 
    } 
    }); 
}; 

這裏的PHP文件:

<? 
if ($_POST) { 
    $user = $_POST['userid']; // ADDED THIS LINE AND CHANGED NEXT TO GET STUFF INTO THE USERS OWN FILE 
    $logFile = dirname($_SERVER['SCRIPT_FILENAME']) . "/" . $user . ".json"; 
    if (!file_exists($logFile)) { 
     touch($logFile); 
     chmod($logFile, 0777); 
    } 
    $newStr = ($_POST); 
    $str = str_replace('\\', '', $newStr); 
    $toPost = substr($str, 0, strrpos($str, ']')); 
    file_put_contents($logFile, $toPost); 
    echo "OK"; 
    return; 
} 

我需要使用用戶ID來保存文件的正確名稱。這是工作,但該文件正在獲取用戶ID添加到我想保留的數組的末尾。

感謝您的幫助。

+0

我會先看看那些不需要的文本是如何到達那裏的。解決問題,不要做一個解決方法。 –

+0

@JustinWood是的,這是我的計劃,但我很好奇搞清楚如何使用strrpos,並讓自己陷入了這個問題。一旦我看到這裏提供的問題/答案沒有涉及到這個確切的問題,它可能值得回答。 – charliemagee

+0

如果您向我們展示如何獲取該數組和文本,我們可能會引導您將其刪除。 –

回答

2

嘗試..

$text = '["bunch", "of", "stuff"]unwantedtext'; 
$text = substr($text,0, strpos($text,"]")+1); 

echo $text; 

我不明白這一點..你要檢查 'JSON' 文件(例如)和..get只有 '[]' 的東西?

<?php 
$text = '["bunch", "of", "stuff"]unwantedtext ["bunchssdfs", "of", "stuxxxff"]dsfadffs'; 
preg_match_all("#(\[)(.*?)(\])#isU", $text, $matches); 

if(sizeof($matches) > 0){ 
    $myMatches = $matches[0]; 
    echo implode(PHP_EOL,$matches[0]); // show matches.. 
} 
+0

它開始覺得我沒有正確地問我的問題。這給了我整個文件的大寫字母A. – charliemagee

0

你的問題是不完全清楚,但通過代碼判斷,你正試圖將$_POST變量保存爲JSON字符串。

如果是這樣的話,請不要手動生成JSON,使用json_encode代替:

if ($_POST) { 
    $user = $_POST['userid']; // ADDED THIS LINE AND CHANGED NEXT TO GET STUFF INTO THE USERS OWN FILE 
    $logFile = dirname($_SERVER['SCRIPT_FILENAME']) . "/" . $user . ".json"; 
    if (!file_exists($logFile)) { 
     touch($logFile); 
     chmod($logFile, 0777); 
    } 

    file_put_contents($logFile, json_encode($_POST)); 

    echo "OK"; 
} 

請注意,你需要從你的Ajax調用檢查返回值,以確定是否真的保存工作。無論結果如何,在向服務器發出成功請求時,都會調用JavaScript中的success函數。

+0

嗯,好吧,$ _Post變量已經是一個json字符串。因此,當我嘗試使用json_encode時,它將它全部封裝爲對象,然後將userid粘貼到對象中。我只想要沒有userid的數組。 – charliemagee

+0

@charliemagee不,$ _POST變量是一個數組,你不能像字符串那樣對待它。如果您需要刪除用戶標識,只需在數組中使用'json_encode',就可以將其解除。 – jeroen

+0

好好拍我的腦袋。我知道第一個位是一個數組,但沒有意識到添加用戶標識符只是添加到數組中。我使用array_pop來擺脫它。鍛鍊了魅力。謝謝。難道這不是作爲答案創造出來的,而不是埋在評論中? – charliemagee

相關問題