2013-12-20 85 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

相关问题