saltos - str_replace php
¿Reemplazar espacios en blanco y saltos de línea excesivos con PHP? (8)
$string = "My text has so much whitespace
Plenty of spaces and tabs";
echo preg_replace("//s/s+/", " ", $string);
Leo la documentación de PHP y sigo el tutorial de preg_replace, sin embargo este código produce
Mi texto tiene tanto espacio en blanco Un montón de espacios y pestañas
¿Cómo puedo convertirlo en:
Mi texto tiene tanto espacio en blanco
Un montón de espacios y pestañas
¿Por qué estás haciendo esto?
html muestra solo un espacio incluso si usa más de un espacio ...
Por ejemplo:
<i>test content 1 2 3 4 5</i>
La salida será:
contenido de la prueba 1 2 3 4 5
si necesita más de un espacio en html, debe usar
Editado la respuesta correcta. Desde PHP 5.2.4 más o menos, el siguiente código hará:
echo preg_replace(''//v(?:[/v/h]+)/'', '''', $string);
En primer lugar, me gustaría señalar que las nuevas líneas pueden ser / r, / n o / r / n, según el sistema operativo.
Mi solución:
echo preg_replace(''/[ /t]+/'', '' '', preg_replace(''/[/r/n]+/'', "/n", $string));
Que podría separarse en 2 líneas si es necesario:
$string = preg_replace(''/[/r/n]+/'', "/n", $string);
echo preg_replace(''/[ /t]+/'', '' '', $string);
Actualización :
Una solución aún mejor sería esta:
echo preg_replace(''/[ /t]+/'', '' '', preg_replace(''//s*$^/s*/m'', "/n", $string));
O:
$string = preg_replace(''//s*$^/s*/m'', "/n", $string);
echo preg_replace(''/[ /t]+/'', '' '', $string);
Cambié la expresión regular que hace que varias líneas se dividan en una sola mejor. Utiliza el modificador "m" (que hace ^ y $ coincidir con el inicio y el final de las nuevas líneas) y elimina los caracteres / s (espacio, tabulación, nueva línea, salto de línea) que son el final de una cadena y el comienzo del siguiente. Esto resuelve el problema de las líneas vacías que no tienen más que espacios. Con mi ejemplo anterior, si una línea se llenó de espacios, se habría saltado una línea adicional.
Enfoque alternativo:
echo preg_replace_callback("//s+/", function ($match) {
$result = array();
$prev = null;
foreach (str_split($match[0], 1) as $char) {
if ($prev === null || $char != $prev) {
$result[] = $char;
}
$prev = $char;
}
return implode('''', $result);
}, $string);
Salida :
My text has so much whitespace
Plenty of spaces and tabs
Editar : Readded esto por ser un enfoque diferente. Probablemente no sea lo que se solicita, pero al menos no fusionará grupos de espacios en blanco diferentes (por ejemplo space, tab, tab, space, nl, nl, space, space
se convertirían en space, tab, space, nl, space
).
esto COMPLETAMENTE MINIFICA toda la cadena (como un gran artículo de blog) pero conserva todas las etiquetas HTML en su lugar.
$email_body = str_replace(PHP_EOL, '' '', $email_body);
//PHP_EOL = PHP_End_Of_Line - would remove new lines too
$email_body = preg_replace(''/[/r/n]+/'', "/n", $email_body);
$email_body = preg_replace(''/[ /t]+/'', '' '', $email_body);
prueba con:
$string = "My text has so much whitespace
Plenty of spaces and tabs";
//Remove duplicate newlines
$string = preg_replace("/[/n]*/", "/n", $string);
//Preserves newlines while replacing the other whitspaces with single space
echo preg_replace("/[ /t]*/", " ", $string);
Reemplazar nueva línea múltiple, pestaña, espacio
$text = preg_replace("/[/r/n]+/", "/n", $text);
$text = preg_replace("//s+/", '' '', $text);
Probado :)
//Newline and tab space to single space
$from_mysql = str_replace(array("/r/n", "/r", "/n", "/t"), '' '', $from_mysql);
// Multiple spaces to single space ( using regular expression)
$from_mysql = ereg_replace(" {2,}", '' '',$from_mysql);
// Replaces 2 or more spaces with a single space, {2,} indicates that you are looking for 2 or more than 2 spaces in a string.