2013-12-20 2 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; 
} 

мне нужно использовать идентификатор пользователя, чтобы сохранить файл с правильным именем. Это работает, но файл получает идентификатор пользователя, добавленный в конец массива, который я хочу сохранить.

Спасибо за помощь.

+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"; 
} 

Пожалуйста, обратите внимание, что вам необходимо проверить возвращаемое значение из вашего АЯКС вызова, чтобы определить, действительно сохранить работал. Функция success в вашем javascript вызывается, когда был сделан успешный запрос на сервер, независимо от результата.

+0

Хммм, ну, переменная $ _Post уже является json-строкой. Поэтому, когда я пытаюсь json_encode, он обертывает все это как объект, а затем также вставляет идентификатор пользователя внутри объекта. Я просто хочу, чтобы массив без идентификатора пользователя в конце. – charliemagee

+0

@charliemagee Нет, переменная '$ _POST' является массивом, и вы не можете рассматривать ее как строку. Если вам нужно удалить идентификатор пользователя, просто 'unset()' it в массиве, прежде чем использовать 'json_encode'. – jeroen

+0

хорошо похлопайте себя вверх головой. Я знал, что первый бит был массивом, но не понимал, что добавление userid просто добавляет к массиву. Я использовал array_pop, чтобы избавиться от него. Работал шармом. Благодарю. Разве это не должно быть создано как ответ, а не похоронен в комментариях? – charliemagee

Смежные вопросы