Как удалить несколько новых строк (\ n) из строки json? - PullRequest
1 голос
/ 03 апреля 2012

Кажется, проблема с магическими кавычками. Исходная строка просто содержит \ n и \ n \ n и \ n \ n \ n и \ n \ r и так далее. Эти новые строки не интерпретируются браузером.

То, что мы хотим сделать, это: заменить более 2-х строк новой строкой \ n.

То, что мы уже пробовали: много разных регулярных выражений с preg_replace, но \ n не будет исключено.

Есть идеи?

Вот пример (обновленный по вашим предложениям - но все еще не работает):

echo '<h3>Source:</h3>';
$arr_test = array(
    'title'     => 'my title',
    'content'   => 'thats my content\n\n\n\nwith a newline'
);
$json_text = json_encode($arr_test);
$json_text = stripslashes($json_text);  //if I leave that out, then \\n will echo
echo $json_text;
// OUTPUT: {"title":"my title","content":"thats my content\n\n\n\nwith a newline"}

echo '<h3>Result 1:</h3>';
$pattern = '/\n{2,}/';
$result1 = preg_replace($pattern,"x",$json_text);
echo $result1;
// OUTPUT: {"title":"my title","content":"thats my content\n\n\n\nwith a newline"}

echo '<h3>Result 2:</h3>';
$result2 = preg_replace( '/([\n]+)/s', 'x', $json_text, -1, $count );
echo $count;
// OUTPUT: 0
echo $result2;
// OUTPUT: {"title":"my title","content":"thats my content\n\n\n\nwith a newline"}

Ответы [ 5 ]

1 голос
/ 03 апреля 2012

Вы также можете попытаться перебрать строку и заменить две строки новой строкой до тех пор, пока не останется двойной строки:

echo '<h3>Result 4:</h3>';
$result4 = $json_text;
do{
    $result4 = str_replace('\n\n','\n',$result4, $count);
}while($count>0);

echo $result4;
// OUTPUT: {"title":"my title","content":"thats my content\nwith a newline"}

или с preg_replace:

echo '<h3>Result 5:</h3>';

$result5 = preg_replace('/(\\\n)+/m', '\\\n', $json_text);

echo $result5;
// OUTPUT: {"title":"my title","content":"thats my content\nwith a newline"}
1 голос
/ 03 апреля 2012
if(get_magic_quotes_gpc()) {
   $string =  stripslashes($string); // $string sended with POST or GET 
}

$string = str_replace("\n\n", "\n", $string); // only for 2 newlines

ИЛИ

$string = preg_replace('/\n{2,}/s', '\n', $string); // more than 2 newlines
0 голосов
/ 03 апреля 2012

Попробуйте:

  1. Заменить все символы \ n (1 или более) на модификатор \ n
  2. / s - включить несколько строк
>     $string = preg_replace( $'/([\n]+)/s', '\n', $string, -1, $count );                                               
>     echo $count;
0 голосов
/ 03 апреля 2012

попробуйте это:

// replace 2 or more consecutive newlines with a single newline
$string = preg_replace("/\n\n+/i", "\n", $string);
0 голосов
/ 03 апреля 2012
echo str_replace("\n", "", "aassasa\n \n aasassf \n saaaaafs asaf ssaf \n afsf \n ");

только для вашей демонстрации

echo str_replace ("a", "", "aaabcefefgaaaaaaaaaaamnopqraaaaaa");

...