Cómo eliminar los espacios en blanco dentro de todas las etiquetas, pero, y esto es importante, sin eliminar \ n

En este ejemplo tengo dos tipos de etiquetas. Estoy buscando algo que pueda funcionar en cualquier texto con cualquier tipo de etiquetas.

Tengo esto:

$text ="<p> some text </p><h2> some text</h2>\n
<p>some text </p><h2>some text </h2>";

Quiero esto:

<p>some text</p><h2>some text</h2>\n 
<p>some text</p><h2>some text</h2>

Lo intenté:

$text = preg_replace ("/>\s+/", ">", $text);//remove space from start
$text = preg_replace ("/\s+</", "<", $text);//and end
echo $text;

El problema es que también elimina \ n.

3
segon 30 ene. 2016 a las 13:34

7 respuestas

La mejor respuesta

Estas cerrada, prueba con: Estás cerrado, prueba con:

$text = preg_replace ("/> +/", ">", $text);//remove space from start
$text = preg_replace ("/ +</", "<", $text);//and end

Si desea eliminar también las tabulaciones:

$text = preg_replace ("/>\h+/", ">", $text);//remove space from start
$text = preg_replace ("/\h+</", "<", $text);//and end

\h significa espacio horizontal.

5
Toto 30 ene. 2016 a las 11:37

Una alternativa podría ser:

    <?php
    $text ="<p> some text </p><h2> some text</h2> 
<p>some text </p><h2>some text </h2>";

    $result = preg_replace_callback(
        '|>([^\r\n]*?)<|',
        function ($hit) {
            return '>'.trim($hit[1]).'<';
        },
        $text
    );

    echo '<pre>' . htmlentities($result) . '</pre>';  // for testing only

    ?>
0
hherger 30 ene. 2016 a las 11:52

Use preg replace para que coincida con \ r o \ n o ambos y reemplácelo con nada.

preg_replace( "/\r|\n/", "", $text);

Se trata de eliminar la sangría, eso es solo un espacio en blanco, que se puede eliminar con la función de recorte de php

$trimmed = trim($text);

Además, trim acepta un segundo argumento que puede pasar y también recortar:

$trimmed = trim($text, '\t.');

Lo que, por ejemplo, recortará el carácter de tabulación.

Este código es útil para ti

0
Vadivel S 30 ene. 2016 a las 11:25

Para eliminar el espacio después / antes de una etiqueta <p>/</p>, puede usar:

$text = str_replace('<p> ', '<p>', $text);
$text = str_replace(' </p>', '</p>', $text);

Podrías convertirlo en una función

function mytrim ( $text ) {
    $myChars = array('p', 'h2');

    foreach ( $myChars as $chr ) {
       $tag1 = '<' . $char . '> ';
       $tag2 = ' </' . $char . '>';
       $text = str_replace( $tag1, '<'. $char . '>', $text);
       $text = str_replace( $tag2, '</'. $char . '>', $text);
    }
    return $text;
}

Para usar la función que escribirías

$text = mytrim($text);
0
RST 30 ene. 2016 a las 11:05

Tratar

$text = str_replace(array('> ',' <'),array('>','<'),$text);
echo $text;

No use expresiones regulares.

0
Naumov 30 ene. 2016 a las 10:45

Creo que lo que estás buscando es la función de recorte en php. No es necesario utilizar expresiones regulares para eso. Simplemente llámelo con su variable de cadena y funcionará

0
jedemu115 30 ene. 2016 a las 10:39

Aquí el serán reemplazados Pruebe

$text = preg_replace ("/> /", ">", $text);//remove space from start
$text = preg_replace ("/ </", "<", $text);//and end
echo $text;
1
Rakesh Nair 30 ene. 2016 a las 10:39