Substituindo espaços por sublinhados

136

Eu tenho um script PHP que os usuários irão inserir um nome como: Alex_Newton,

No entanto, alguns usuários usarão um espaço em vez de um sublinhado, então minha pergunta é:

Como faço para substituir automaticamente espaços por sublinhados em PHP?

alex
fonte

Respostas:

367
$name = str_replace(' ', '_', $name);
Fonte de Tim
fonte
70

Como outros explicaram como fazê-lo usando str_replace, você também pode usar o regex para conseguir isso.

$name = preg_replace('/\s+/', '_', $name);
aksu
fonte
11
Essa é uma solução melhor no sentido de que substitui vários espaços por um único sublinhado, que geralmente é a saída desejada.
Frostymarvelous
5
Também abas e o que quer que seja
Loupax
12

Use a função str_replace do PHP.

Algo como:

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

Use str_replace :

str_replace(" ","_","Alex Newton");
Niklas
fonte
7

Você também pode fazer isso para impedir que as palavras iniciem ou terminem com sublinhados como _words_more_words_. Isso evitaria o início e o término com espaços em branco.

$trimmed = trim($string); // Trims both ends
$convert = str_replace('', '_', $trimmed);
blakroku
fonte
Isso é interessante, pois os espaços no início / fim da linha não serão substituídos por _, mas removidos. No entanto, lembre-se de que ele pode / também removerá outros caracteres do início / fim da string como (\ re and \ n ou tabs).
Paul
1

Isso faz parte do meu código que transforma espaços em sublinhados para nomear meus arquivos:

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

Eu usei assim

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

você pode str_replace dizer que seu nome está na variável$name

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

Outra maneira é usar o regex, pois ajudará a eliminar o espaço de 2 horas, etc.

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

Strtrsubstitui caracteres únicos em vez de cadeias, por isso é uma boa solução para este exemplo. Supostamente strtré mais rápido que str_replace(mas, para este caso de uso, ambos são imensuravelmente rápidos).

echo strtr('Alex Newton',' ','_');
//outputs: Alex_Newton
Thoracius Appotite
fonte
Legal, se alguém convertesse espaços em "_" em vários arquivos longos (logs?), Isso poderia ser mensurável mais rápido? (Embora não haja prova / referência, pode ser uma resposta interessante para qualquer pessoa interessada em velocidade de execução).
Paul
Ei Paul, eu acho que sim. Experimente e faça benchmark.
Thoracius Appotite 11/01/19
0

str_replace- é uma solução evidente. Mas às vezes você precisa saber quais são exatamente os espaços que existem. Estou com um problema com espaços no arquivo csv.

Havia dois caracteres, mas um deles era 0160 (0x0A0) e outro era invisível (0x0C2)

minha solução final:

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

Encontrei o símbolo invisível do visualizador HEX do mc (visualizador da meia-noite - F3 - F9)

Aleksey Polyanskiy
fonte
Que tal '/\s+/'?
FlameStorm