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?

Respostas:



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

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





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

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

1

Eu usei assim

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

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

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

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)


Que tal '/\s+/'?
FlameStorm
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.