Recibo una cadena de una consulta de base de datos, luego elimino todas las etiquetas HTML, retornos de carro y nuevas líneas antes de ponerlo en un archivo CSV. Lo único es que no puedo encontrar una manera de eliminar el exceso de espacio en blanco entre las cadenas.
¿Cuál sería la mejor manera de eliminar los espacios en blanco internos?
Respuestas:
No estoy seguro exactamente de lo que quieres, pero aquí hay dos situaciones:
Si sólo se trata de un exceso whitespaceen el principio o el final de la cadena se puede utilizar
trim()
,ltrim()
ortrim()
para eliminarlo.Si está tratando con espacios adicionales dentro de una cadena, considere un
preg_replace
múltiplo whitespaces" "*
con un solo whitespace" "
.Ejemplo:
fuente
$foo = preg_replace( '/\s+/', ' ', $foo );
matará los efectos denl2br()
O bien, reemplace con guión bajo, & nbsp; etcétera etcétera.
fuente
Hi Earth
con 4 espacios en el medio se convertirá en:HiEarth
. Esto no resuelve mi problema con relevante a la pregunta.$str = trim(preg_replace('/\s+/',' ', $str));
La línea de código anterior eliminará espacios adicionales , así como espacios iniciales y finales.
fuente
ninguno de los otros ejemplos me funcionó, así que he usado este:
esto reemplaza todas las pestañas, nuevas líneas, espacios dobles, etc. a 1 espacio simple.
fuente
\s+
. Aunque fue en 2014, tal vez haya cambiado, no he tocado PHP en los últimos 3 años, no puedo comentar pero dejará la respuesta actual mientras era una solución y aún puede serlo en algunos casos.Si desea reemplazar solo múltiples espacios en una cadena, por ejemplo:
"this string have lots of space . "
Y espera que la respuesta sea"this string have lots of space"
, puede usar la siguiente solución:fuente
Existen fallas de seguridad al usar preg_replace (), si obtiene la carga útil de la entrada del usuario [u otras fuentes no confiables]. PHP ejecuta la expresión regular con eval (). Si la cadena entrante no se desinfecta correctamente, su aplicación corre el riesgo de ser sometida a inyección de código .
En mi propia aplicación, en lugar de molestarme en desinfectar la entrada (y como solo trato con cadenas cortas), en su lugar hice una función un poco más intensiva en el procesador, aunque es segura, ya que no evalúa () nada.
fuente
fuente
Puedes usar:
Esto elimina espacios en blanco adicionales de ambos lados de la cadena y convierte dos espacios en uno dentro de la cadena. ¡Tenga en cuenta que esto no convertirá tres o más espacios seguidos en uno! ¡Otra forma en que puedo sugerir es usar implosionar y explotar, que es más seguro pero totalmente no óptimo!
Mi sugerencia es usar un bucle for nativo o usar expresiones regulares para hacer este tipo de trabajo.
fuente
Para ampliar la respuesta de Sandip, aparecía un montón de cadenas en los registros que estaban mal codificados en bit.ly. Querían codificar solo la URL, pero colocar un identificador de Twitter y algunas otras cosas después de un espacio. Se veía así
Normalmente, eso no sería un problema, pero estoy recibiendo muchos intentos de inyección de SQL, así que redirijo cualquier cosa que no sea una ID válida a un 404. Utilicé el método preg_replace para convertir la cadena inválida productID en un ID de producto válido.
Busco un espacio en la URL y luego elimino todo después.
fuente
Recientemente escribí una función simple que elimina el exceso de espacio en blanco de la cadena sin expresión regular
implode(' ', array_filter(explode(' ', $str)))
.fuente
fuente