HOWTO · PHP
Como remover o último caractere de uma string em PHP
Este artigo introduz como remover o último caractere de uma string em PHP. Inclui a função rtrim() e a função substr(). Descubra os melhores métodos para manipulação de strings em PHP e aprimore suas habilidades de programação com exemplos práticos e explicações claras.
Nesta página
Remover conteúdo do final de uma string em PHP
Para remover conteúdo do final de uma string em PHP, escolha a função com base no que deve ser removido. Use rtrim() para remover qualquer número de bytes finais que pertençam a um conjunto de caracteres especificado. Use substr() com um comprimento de -1 para manter a string, exceto seu byte final. As strings do PHP são orientadas a bytes, portanto use uma função compatível com multibyte quando “caractere” significar um caractere Unicode completo.
Use rtrim() para remover um conjunto de caracteres finais
rtrim() remove caracteres do lado direito de uma string enquanto eles pertencerem ao seu segundo argumento, chamado de máscara de caracteres. A máscara é um conjunto de caracteres elegíveis, não um sufixo que deve corresponder como uma sequência completa única. A função continua removendo bytes desse conjunto até alcançar um byte que não está na máscara. Como resultado, ela pode remover vários caracteres finais diferentes e cópias repetidas de um caractere.
Para um valor que pode terminar com qualquer um de dois sinais de pontuação, este exemplo completo aplica a máscara !?:
<?php
$value = "report!?!!";
$clean = rtrim($value, "!?");
echo $clean, PHP_EOL;
report
Os pontos de exclamação finais e o ponto de interrogação pertencem todos à máscara, portanto cada um é removido do final até que o t anterior seja alcançado.
Use este método quando a regra for “remover a pontuação final ou o preenchimento deste conjunto”. Especifique apenas os caracteres que devem ser removíveis. Por exemplo, a máscara !?. permite que qualquer sequência desses três caracteres no final seja removida; isso não significa “remover o sufixo literal !?.”. Se a string terminar com um caractere fora da máscara, esse caractere e tudo antes dele permanecem. Uma string vazia permanece vazia.
Use substr() para remover o caractere final
Para uma string ASCII em que o objetivo é remover exatamente seu último caractere, substr($string, 0, -1) mantém o prefixo e omite o byte final. O deslocamento inicial 0 começa no início da string. Um comprimento negativo conta regressivamente a partir do final, portanto -1 faz com que a parte retornada pare um byte antes do final.
<?php
$string = "Hello World!";
$withoutLastByte = substr($string, 0, -1);
echo $withoutLastByte, PHP_EOL;
Hello World
Este código omite o byte final independentemente de ser uma letra, um sinal de pontuação ou um espaço; diferentemente de rtrim(), ele não verifica o valor do byte.
As strings do PHP e substr() são orientados a bytes. Em UTF-8, um caractere exibido pode usar vários bytes, portanto remover um byte de uma string que termina com um caractere multibyte pode deixar uma sequência de bytes incompleta em vez de remover um caractere completo. Para remover um caractere Unicode, use mb_substr($string, 0, -1, 'UTF-8') com a extensão mbstring habilitada. Escolha a codificação que corresponde aos dados quando não for UTF-8.
Escolha a abordagem certa e trate os casos limite
Use rtrim() quando a regra de remoção nomear um conjunto de caracteres finais e puder remover vários deles. Use substr() quando a regra for descartar um número fixo de bytes, independentemente de seus valores. Para um valor ASCII simples e um caractere final, substr($string, 0, -1) expressa essa intenção diretamente. Para um preenchimento composto por vários caracteres possíveis, forneça a rtrim() a máscara exata que você deseja.
Ambas as funções retornam uma string; nenhuma altera a variável original no local. Atribua o resultado se o código posterior precisar do valor limpo. Antes de escolher um método, considere se a entrada pode estar vazia, se o caractere de destino está realmente presente no final e se os dados usam codificação multibyte. A string vazia permanece vazia com qualquer uma das operações, enquanto rtrim() deixa um final não correspondente inalterado. substr() ainda remove um byte sem verificar seu significado.
Uma regra prática é usar rtrim() para um conjunto de caracteres finais e substr() para uma contagem fixa de bytes. Se “caractere” significar um ponto de código Unicode completo em sua aplicação, use a função de string multibyte correspondente e garanta que sua extensão e codificação estejam configuradas. Essas distinções também ajudam ao adaptar os exemplos: altere a máscara para definir quais bytes finais podem ser removidos, ou altere o comprimento de substr() para definir quantos bytes devem ser omitidos.