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?
$name = str_replace(' ', '_', $name);
Como otros han explicado cómo hacerlo usando str_replace
, también puede usar regex para lograr esto.
$name = preg_replace('/\s+/', '_', $name);
$name = str_replace(' ', '_', $name);
Llame a http://php.net/str_replace :$input = str_replace(' ', '_', $input);
Utilice str_replace :
str_replace(" ","_","Alex Newton");
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 parte de mi código que hace espacios en guiones bajos para nombrar mis archivos:
$file = basename($_FILES['upload']['name']);
$file = str_replace(' ','_',$file);
Solia asi
$option = trim($option);
$option = str_replace(' ', '_', $option);
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);
Strtr
reemplaza caracteres individuales en lugar de cadenas, por lo que es una buena solución para este ejemplo. Supuestamente strtr
es 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
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)
'/\s+/'
?