php - todos - Eliminar múltiples espacios en blanco
quitar espacios en texto php (15)
En verdad, si piensas que quieres algo como esto:
preg_replace(''//n+|/t+|/s+/'','' '',$string);
Obtendré $row[''message'']
desde una base de datos MySQL y necesito eliminar todos los espacios en blanco como /n
/t
y así sucesivamente.
$row[''message''] = "This is a Text /n and so on /t Text text.";
debe estar formateado para:
$row[''message''] = ''This is a Text and so on Text text.'';
Lo intenté:
$ro = preg_replace(''//s/s+/'', '' '',$row[''message'']);
echo $ro;
pero no elimina /n
o /t
, solo espacios individuales. ¿Puede alguien decirme cómo hacer eso?
Esto es lo que usaría:
a. Asegúrese de usar comillas dobles, por ejemplo:
$row[''message''] = "This is a Text /n and so on /t Text text.";
segundo. Para eliminar espacios en blanco adicionales, use:
$ro = preg_replace(''//s+/'', '' '', $row[''message'']);
echo $ro;
Puede que no sea la solución más rápida, pero creo que requerirá el menor código, y debería funcionar. Aunque nunca he usado mysql, entonces puedo estar equivocado.
Necesitas:
$ro = preg_replace(''//s+/'', '' '',$row[''message'']);
Está utilizando /s/s+
que significa espacios en blanco (espacio, tabulación o nueva línea) seguidos por uno o más espacios en blanco. Lo que efectivamente significa reemplazar dos o más espacios en blanco con un solo espacio.
Lo que quiere es reemplazar uno o más espacios en blanco con un solo espacio en blanco, para que pueda usar el patrón /s/s*
o /s+
(recomendado)
No puedo replicar el problema aquí:
$x = "this /n /t/t /n works.";
var_dump(preg_replace(''//s/s+/'', '' '', $x));
// string(11) "this works."
No estoy seguro si fue solo un error de transcripción o no, pero en su ejemplo, está usando una cadena de una sola cita. /n
y /t
solo se tratan como nueva línea y tabulación si tiene una cadena con comillas dobles. Es decir:
''/n/t'' != "/n/t"
Editar : como señaló Codaddict, /s/s+
no reemplazará un solo carácter de tabulación. Todavía no creo que el uso de /s+
sea una solución eficiente, ¿qué tal esto?
preg_replace(''/(?:/s/s+|/n|/t)/'', '' '', $x);
Sin preg_replace ()
$str = "This is a Text /n and so on /t Text text.";
$str = str_replace(["/r", "/n", "/t"], " ", $str);
while (strpos($str, " ") !== false)
{
$str = str_replace(" ", " ", $str);
}
echo $str;
Sin preg_replace, con la ayuda de loop.
<?php
$str = "This is a Text /n and so on /t Text text.";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
if (isset($str_arr[$i + 1])
&& $str_arr[$i] == '' ''
&& $str_arr[$i] == $str_arr[$i + 1]) {
unset($str_arr[$i]);
}
else {
continue;
}
}
echo implode("", $str_arr) ;
?>
Todo lo que necesita es ejecutarlo de la siguiente manera:
echo preg_replace(''//s{2,}/'', '' '', "This is a Text /n and so on /t Text text."); // This is a Text and so on Text text.
Yo uso este código y patrón:
preg_replace(''///s+/'', '' '',$data)
$data = ''This is a Text
and so on Text text on multiple lines and with whitespaces'';
$data= preg_replace(''///s+/'', '' '',$data);
echo $data;
Puede probar esto en http://writecodeonline.com/php/
esto reemplazará múltiples pestañas con una sola pestaña
preg_replace("//s{2,}/", "/t", $string);
simplificado a una función:
function removeWhiteSpace($text)
{
$text = preg_replace(''/[/t/n/r/0/x0B]/'', '''', $text);
$text = preg_replace(''/([/s])/1+/'', '' '', $text);
$text = trim($text);
return $text;
}
basado en la respuesta de Danuel O''Neal.
$str=''This is a Text /n and so on Text text.'';
print preg_replace("/[[:blank:]]+/"," ",$str);
<?php
#This should help some newbies
# REGEX NOTES FROM DANUEL
# I wrote these functions for my own php framework
# Feel Free to make it better
# If it gets more complicated than this. You need to do more software engineering/logic.
# (.) // capture any character
# /1 // if it is followed by itself
# + // one or more
class whitespace{
static function remove_doublewhitespace($s = null){
return $ret = preg_replace(''/([/s])/1+/'', '' '', $s);
}
static function remove_whitespace($s = null){
return $ret = preg_replace(''/[/s]+/'', '''', $s );
}
static function remove_whitespace_feed( $s = null){
return $ret = preg_replace(''/[/t/n/r/0/x0B]/'', '''', $s);
}
static function smart_clean($s = null){
return $ret = trim( self::remove_doublewhitespace( self::remove_whitespace_feed($s) ) );
}
}
$string = " Hey yo, what''s /t/n/tthe sc/r/nen/n/tario! /n";
echo whitespace::smart_clean($string);
<?php
$str = "This is a string with
spaces, tabs and newlines present";
$stripped = preg_replace(array(''//s{2,}/'', ''/[/t/n]/''), '' '', $str);
echo $str;
echo "/n---/n";
echo "$stripped";
?>
Estas salidas
This is a string with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present
preg_replace(''/(/s/s+|/t|/n)/'', '' '', $row[''message'']);
Esto reemplaza todas las pestañas, todas las líneas nuevas y todas las combinaciones de espacios múltiples, pestañas y líneas nuevas con un solo espacio.
preg_replace(''/[/s]+/mu'', '' '', $var);
/s
ya contiene pestañas y líneas nuevas, por lo que esta expresión regular anterior parece ser suficiente.