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?

Respuestas:



70

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

$name = preg_replace('/\s+/', '_', $name);

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





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);

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);

1

Solia asi

$option = trim($option);
$option = str_replace(' ', '_', $option);

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);

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

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)


¿Qué hay de '/\s+/'?
FlameStorm
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.