web-dev-qa-db-fra.com

PHP supprimer le saut de ligne ou le CR LF sans succès

J'ai fait une fonction pour supprimer les sauts de ligne avec php sans succès, j'ai essayé de tout remplacer le code et je reçois toujours ces sauts de ligne, je crée un fichier json et je ne peux pas le lire à partir de jsonp avec jquery à cause de ces sauts de ligne semblent tout casser.

function clean($text)
{
$text = trim( preg_replace( '/\s+/', ' ', $text ) );  
$text = preg_replace("/(\r\n|\n|\r|\t)/i", '', $text);
return $text;
}

Quand je regarde la source, il y a un saut de ligne qui apparaît dans tous les href, img et br Ceci est un résultat json_encode : 

<a
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">

saut de ligne après a. il est hapenig à img src et br

la seule façon que je peux enlever ces casser avec

$text = preg_replace("/\s/i", '', $text);

Mais vous comprenez qu'il n'y a plus d'espace dans toute la chaîne et que ce n'est pas ce que nous voulons.

12
Gino

cela remplace mieux pour moi:

= str_replace (array("\r\n", "\n", "\r"), ' ', $text)
26
Jirka Kopřiva

Que dis-tu de ça:

function clean($text)
{
    $parts = explode(' ', $text);
    foreach ($parts as $key => $value)
        $parts[$key] = preg_replace('/\s/', ' ', $value);
    return implode(' ', $parts);
}

En effet, si au lieu de nettoyer le fichier JSON de cette manière, vous pouvez utiliser json_encode pour le créer, vous résoudrez ce problème lors d’une étape précédente.

1
J. Bruni

Que diriez-vous de ce qui suit

function clean($text)
{
    return trim(preg_replace("/(\s*[\r\n]+\s*|\s+)/", ' ', $text));
}

la première partie, \s*[\r\n]+\s*, remplacera les sauts de ligne, les espaces de début et les espaces en un seul espace.

la deuxième partie \s+ réduira les espaces en un seul espace.

then trim() supprime l’espace avant/arrière.

1
Jack Ting

Essayez d'utiliser la fonction de trim par défaut avec "character_mask".

Par exemple:

$text = trim($text, " \t\n\r\0\x0B"); 

Lire la documentation officielle http://php.net/manual/ru/function.trim.php

1
Correcter

Si vous voulez supprimer les CR et conserver les LF, c'est vraiment très simple (juste du bon sens):

$text = str_replace("\r", "", $text);
0
Apostolos
function clean($text)
{
    return trim(preg_replace('/\\\\r|\\\\n|\\\\t/i', ' ', $text));
}

Fonctionne bien.

0
Gökhan Yilmaz

Peut-être pourriez-vous essayer de parcourir le texte caractère par caractère et d’appeler ord() sur chacun, afin de voir si ces caractères de rupture sont vraiment des \r,\ns?

Récemment, j'ai eu un problème similaire avec un espace blanc qui s'est avéré être un espace indestructible même à l'intérieur de la table ASCII (code 194 ou quelque chose du genre).

Si vous êtes intéressé, ma solution n'était pas d'essayer de filtrer les coupures, mais de filtrer TOUT, sauf ce qui était censé être dans le texte, comme ceci:

$text = preg_replace("/[^ \na-zа-я0-9`~\!@#\$%\^&\*\(\)_\+\-\=\[\]\{\}\\\|;\:'\",\.\/\<\>\?]+/ui", "", $text);
0
Tony Bogdanov

utilisez json_encode () et json_decode () à partir de l'extension JSON pour gérer les tâches de de/sérialisation JSON:

$myobj = array( 'foo' => 'bar', 'foz' => 'baz')

$json_myobj = json_encode($myobj);
echo $json_myobj;

$myobj = json_decode($json_myobj);
print_r($myobj);
0
rjz

Une méthode que j'utilise est echo str_replace(array('\r\n', '\r', '\n', '\t'), array('\\r\\n', '\\r', '\\n', '\\t'), $text);

Cela vous permet de voir quels caractères causent les sauts dans le texte et de les remplacer correctement. Par exemple, si vous avez un "\ n" cassant votre texte, lorsque vous utilisez ce code, il affichera un "\ n" à sa place. Exemple: 

<a
href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">

deviendrait:

<a\n href=\"http:\/\/example.com\/out\/content\/\" title=\"link to content website\">

Naturellement, il existe une grande quantité d’autres caractères pouvant être utilisés, mais\r\n,\r,\n et\t sont les plus couramment utilisés.

0
Connor Deckers