Quitar espacios extra de string con PHP
Introducción
Como probablemente sabrás existe en PHP una función en PHP llamada trim. Cuyo funcionamiento básico es quitar los espacios sobrantes a la izquierda y a la derecha de un string dado. Por ejemplo
1 2 3 4 5 | <?php //String con espacios sobrantes $string = " En un lugar de la Mancha "; echo trim($string); ?> |
La salida sería el string sin los espacios del principio y el final:
El problema surge cuando tenemos un string con espacios sobrantes en mitad del string. Algo como esto:
1 2 3 4 5 | <?php //String con espacios sobrantes en la mitad $string_complicado = " En un lugar de la Mancha "; echo trim($string_complicado); ?> |
En este caso trim no funciona, dado que no hace nada con los que están en medio. Por tanto necesitamos una alternativa para hacer esto, una alternativa en forma de función claro.
Función para quitar los espacios repetidos
Aquí se plantean varias alternativas, una posible solución podría ser con expresiones regulares, pero quizá sea menos clara. Así que utilicemos la función que sale en un comentario de la página de documentación de trim, y añadámosle la línea “$ret_str = “”;” para evitar un error de PHP, la función completa quedaría así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php function quitar_espacios_extra($str) { //Utilizamos trim antes de empezar $str = trim($str); //Inicializamos el string que devolvemos $ret_str =""; //Recorremos el string for($i=0;$i < strlen($str);$i++) { /*Si estamos en algo que no es un espacio, seguimos copiando el string de entrada al de salida */ if(substr($str, $i, 1) != " ") { $ret_str .= trim(substr($str, $i, 1)); } else { /*Si es un espacio nos lo saltamos, aumentando el contador i del bucle*/ while(substr($str,$i,1) == " "){ $i++; } /* Dado que no queremos quitar todos los espacios, sino solo los repetidos añadimos un espacio después de habernos saltado un nº indeterminado de ellos SI nos saltamos uno, ponemos uno SI nos saltamos 20, ponemos uno igual */ $ret_str.= " "; $i--; } } return $ret_str; } ?> |
Con esta función, usándolo con el string anterior:
1 2 3 4 5 6 | <?php //String con espacios sobrantes en la mitad $string_complicado = " En un lugar de la Mancha "; echo quitar_espacios_extra($string_complicado); ?> |
La salida sería:
Cualquier duda o error como siempre a la sección de comentarios.

3 Comentarios
Yo habría hecho algo así:
function quitar_espacios_extra($str){$ret_str = '';
foreach(explode(' ', $str) as $palabra)
$ret_str = $ret_str . ' ' . $palabra;
return $ret_str;
}
Por cierto, una chulada el diseño
¿Lo has hecho tú mismo?
Lo único, que el menú lateral se va por debajo del div de contenido aquí en la página de comentarios…
@Zootropo. sip, está basado en otro diseño de pago. Respecto a lo del diseño gracias por el aviso, se me había pirado y había dejado un div sin cerrar en este post, ya está arreglado.
Tu función es más clara, la verdad es que no se me había ocurrido, jeje.