Reemplazo de espacios con guiones bajos

136

Tengo un script PHP que los usuarios introducir un nombre como: Alex_Newton,

Sin embargo, algunos usuarios usarán un espacio en lugar de un guión bajo, así que mi pregunta es:

¿Cómo reemplazo automáticamente los espacios con guiones bajos en PHP?

alex
fuente

Respuestas:

367
$name = str_replace(' ', '_', $name);
Fuente de tim
fuente
70

Como otros han explicado cómo hacerlo usando str_replace, también puede usar regex para lograr esto.

$name = preg_replace('/\s+/', '_', $name);
aksu
fuente
11
Esta es una mejor solución en el sentido de que reemplaza múltiples espacios con un solo guión bajo, que generalmente es el resultado deseado.
frostymarvelous
55
También pestañas y lo que sea
Loupax
12

Utilice la función str_replace de PHP.

Algo como:

$str = str_replace(' ', '_', $str);
anubhava
fuente
7

También puede hacer esto para evitar que las palabras comiencen o terminen con guiones bajos como _words_more_words_. Esto evitaría comenzar y terminar con espacios en blanco.

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);
blakroku
fuente
Esto es interesante, ya que los espacios en el inicio / final de la línea no se reemplazarán por _ sino que se eliminarán. Sin embargo, tenga en cuenta que también puede / eliminará otros caracteres del comienzo / final de la cadena como (\ r y \ n o pestañas).
Paul
1

Esto es parte de mi código que hace espacios en guiones bajos para nombrar mis archivos:

$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);
jmmaguigad
fuente
1

Solia asi

$option = trim($option);
$option = str_replace(' ', '_', $option);
Fil
fuente
0

puedes usar str_replace decir que tu nombre está en variable$name

$result = str_replace(' ', '_', $name);

Otra forma es usar expresiones regulares, ya que ayudará a eliminar el espacio de 2 veces, etc.

  $result=  preg_replace('/\s+/', '_', $name);
Raj
fuente
0

Strtrreemplaza caracteres individuales en lugar de cadenas, por lo que es una buena solución para este ejemplo. Supuestamente strtres más rápido que str_replace(pero para este caso de uso, ambos son inconmensurablemente rápidos).

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton
Appotite de Thoracius
fuente
Genial, si uno convirtiera espacios a "_" en varios archivos largos (¿registros?), ¿Esto podría ser notablemente más rápido? (Aunque no hay prueba / referencia, puede ser una respuesta interesante para cualquier persona interesada en la velocidad de ejecución).
Paul
Hola Paul, creo que sí. Pruébalo y compáralo.
Thoracius Appotite
0

str_replace- Es una solución evidente. Pero a veces necesitas saber cuáles son exactamente los espacios que hay. Tengo un problema con los espacios del archivo csv.

Había dos caracteres pero uno de ellos era 0160 (0x0A0) y otro era invisible (0x0C2)

mi solución final:

$str = preg_replace('/\xC2\xA0+/', '', $str);

Encontré el símbolo invisible del visor HEX de mc (visor de medianoche - F3 - F9)

Aleksey Polyanskiy
fuente
¿Qué hay de '/\s+/'?
FlameStorm