42 votes

Remplacer plusieurs nouvelles lignes, tabulations et espaces

Je souhaite remplacer plusieurs caractères de retour à la ligne par un seul caractère de retour à la ligne, et plusieurs espaces par un seul espace.

J'ai essayé preg_replace("/\n\n+/", "\n", $text); et a échoué !

Je fais également ce travail sur $text pour le formatage.

$text = wordwrap($text, 120, '<br/>', true);
$text = nl2br($text);

$text est un grand texte pris de l'utilisateur pour BLOG, et pour un meilleur formatage j'utilise wordwrap.

1voto

anubhava Points 172509

Je suggérerais quelque chose comme ceci :

preg_replace("/(\R){2,}/", "$1", $str);

Cela permet de prendre en compte tous les caractères de retour à la ligne Unicode.

1voto

Heman Points 33

Si vous souhaitez simplement remplacer plusieurs onglets par un seul, utilisez le code suivant.

preg_replace("/\s{2,}/", "\t", $string);

0voto

The Mask Points 5925

Essayez ceci :

preg_replace("/[\r\n]*/", "\r\n", $text);

0voto

user3129040 Points 145

Remplacer la tête et la fin de la chaîne ou du document !

preg_replace('/(^[^a-zA-Z]+)|([^a-zA-Z]+$)/','',$match);

0voto

Hai Nguyen Points 779

J'ai utilisé la fonction strip_tags en PHP et j'ai eu quelques problèmes comme : après un saut de ligne, une nouvelle ligne apparaît avec quelques espaces, puis un nouveau saut de ligne apparaît continuellement ...etc. sans aucune règle :(.

Voici ma solution pour traiter les strip_tags

Remplacer plusieurs espaces par un seul, plusieurs sauts de ligne par un seul saut de ligne

function cleanHtml($html)
{
    // Clean code into script tags
    $html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);

    // Clean code into style tags
    $html = preg_replace('/<\s*style.+?<\s*\/\s*style.*?>/si', '', $html );

    // Strip HTML
    $string = trim(strip_tags($html));

    // Replace multiple spaces on each line (keep linebreaks) with single space
    $string = preg_replace("/[[:blank:]]+/", " ", $string); // (*)

    // Replace multiple spaces of all positions (deal with linebreaks) with single linebreak
    $string = preg_replace('/\s{2,}/', "\n", $string); // (**)
    return $string;
}

Les mots clés sont (*) et (**).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X