Recebo uma string de uma consulta ao banco de dados e removo todas as tags HTML, retornos de carro e novas linhas antes de colocá-la em um arquivo CSV. A única coisa é que não consigo encontrar uma maneira de remover o excesso de espaço em branco entre as strings.
Qual seria a melhor maneira de remover os caracteres de espaço em branco interno?
Respostas:
Não sabe exatamente o que deseja, mas aqui estão duas situações:
Se você está lidando apenas com o excesso whitespaceno início ou no final da corda que você pode usar
trim()
,ltrim()
ourtrim()
para removê-lo.Se você estiver lidando com espaços extras em uma string, considere um
preg_replace
múltiplo whitespaces" "*
com um único whitespace" "
.Exemplo:
fonte
$foo = preg_replace( '/\s+/', ' ', $foo );
vontade de matar os efeitos denl2br()
Ou substitua por sublinhado, & nbsp; etc etc.
fonte
Hi Earth
com 4 espaços entre eles será:HiEarth
. Isso não resolve meu problema com relevância para a pergunta.$str = trim(preg_replace('/\s+/',' ', $str));
A linha de código acima removerá espaços extras , além de espaços iniciais e finais.
fonte
nenhum dos outros exemplos funcionou para mim, então usei este:
isso substitui todas as guias, novas linhas, espaços duplos etc. para um espaço simples.
fonte
\s+
. Embora tenha sido em 2014, talvez tenha sido alterado, não tocou no PHP nos últimos três anos, não pode comentar, mas deixará a resposta atual enquanto era uma solução e ainda pode estar em alguns casos.Se você deseja substituir apenas vários espaços em uma sequência, por exemplo:
"this string have lots of space . "
E você espera que a resposta seja"this string have lots of space"
, você pode usar a seguinte solução:fonte
Existem falhas de segurança no uso de preg_replace (), se você receber a carga útil da entrada do usuário [ou de outras fontes não confiáveis]. PHP executa a expressão regular com eval (). Se a sequência de caracteres recebida não for adequadamente higienizada, seu aplicativo corre o risco de ser submetido à injeção de código .
Em meu próprio aplicativo, em vez de me preocupar em higienizar a entrada (e como eu lida apenas com seqüências curtas), criei uma função um pouco mais intensiva do processador, embora seja segura, pois não avalia nada ().
fonte
fonte
Você pode usar:
Isso remove espaços em branco extras de ambos os lados da string e converte dois espaços em um dentro da string. Observe que isso não converterá três ou mais espaços seguidos em um! Outra maneira que eu posso sugerir é usar implodir e explodir que é mais seguro, mas não totalmente ideal!
Minha sugestão é usar um loop for nativo ou regex para fazer esse tipo de trabalho.
fonte
Para expandir a resposta de Sandip, eu tinha um monte de strings aparecendo nos logs que foram codificados incorretamente no bit.ly. Eles pretendiam codificar apenas o URL, mas colocar um identificador do twitter e outras coisas depois de um espaço. Parecia assim
Normalmente, isso não seria um problema, mas estou recebendo muitas tentativas de injeção de SQL, então redireciono qualquer coisa que não seja um ID válido para um 404. Usei o método preg_replace para transformar a sequência productID inválida em um productID válido.
Eu procuro um espaço no URL e, em seguida, removo tudo depois dele.
fonte
Eu escrevi recentemente uma função simples que remove o excesso de espaço em branco da string sem expressão regular
implode(' ', array_filter(explode(' ', $str)))
.fonte
fonte