Como obter o último caractere de uma string em PHP: guia completo para iniciantes e profissionais
\n\nImagine a seguinte situação: você está escrevendo um script que precisa verificar se um e-mail termina com @gmail.com, ou precisa extrair a última letra do nome de um usuário. Parece uma tarefa elementar — pegar o último caractere de uma string em PHP. Mas não é bem assim! Mesmo nessa questão simples, existem várias armadilhas, especialmente quando lidamos com português, emojis ou caracteres especiais.
De acordo com dados do Stack Overflow, a pergunta "How to get the last char of a string in PHP?" acumula milhares de visualizações todos os meses. E não é à toa: iniciantes frequentemente tropeçam no substr() com índices negativos, enquanto desenvolvedores experientes debatem sobre desempenho e funcionamento correto com UTF-8.
Neste artigo, vamos explorar 5 métodos funcionais, mostrar exemplos reais de código e dar recomendações claras. Vamos nessa!
\n\nMétodo #1: O clássico — substr() com índice negativo
\n\nO método mais popular e conciso. A função substr() aceita um valor negativo de comprimento para contar caracteres a partir do final da string.
<?php\n$string = "Olá, Mundo!";\n$lastChar = substr($string, -1);\necho $lastChar; // Exibe: !\n?>\n\nVantagens:
\n- \n
- Curto e direto \n
- Rápido na execução \n
Desvantagens:
\n- \n
- Não suporta codificações multibyte (acentuação, caracteres chineses) \n
- Pode retornar um caractere "quebrado" para strings UTF-8 \n
Exemplo do problema com acentos:
\n\n<?php\n$string = "Ação";\n$lastChar = substr($string, -1);\necho $lastChar; // Exibe: � (ponto de interrogação em losango)\n?>\n\nPor que isso acontece? Porque letras acentuadas ocupam 2 bytes em UTF-8, e o substr() trabalha com bytes, não com caracteres. Para texto em inglês, esse método é ideal, mas para projetos multilíngues — não.
Método #2: O correto — mb_substr() para strings multibyte
\n\nSe o seu projeto trabalha com Unicode (e hoje isso é praticamente obrigatório), use mb_substr() da extensão mbstring.
<?php\n$string = "Olá, mundo!";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // Exibe: !\n?>\n\nAgora a parte mais interessante — trabalhando com emojis:
\n\n<?php\n$string = "👋 Olá 🌍";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // Exibe: 🌍\n?>\n\nVantagens:
\n- \n
- Processa corretamente qualquer codificação (UTF-8, UTF-16, etc.) \n
- Funciona com emojis e caracteres especiais \n
Desvantagens:
\n- \n
- Requer a extensão mbstring instalada (presente em quase todas as hospedagens) \n
- Ligeiramente mais lento que
substr()\n
Método #3: Alternativa — str_split() e end()
\n\nVocê pode dividir a string em um array de caracteres e pegar o último elemento. Parece elegante, mas tem um detalhe.
\n\n<?php\n$string = "PHP";\n$chars = str_split($string);\n$lastChar = end($chars);\necho $lastChar; // Exibe: P\n?>\n\nAtenção: str_split() também não funciona bem com strings multibyte. Para acentos, use preg_split() com a flag unicode:
<?php\n$string = "Código";\n$chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);\n$lastChar = end($chars);\necho $lastChar; // Exibe: o\n?>\n\nVantagens:
\n- \n
- Código intuitivo \n
- Fácil de obter não só o último, mas qualquer caractere \n
Desvantagens:
\n- \n
- Consumo excessivo de memória (cria um array) \n
- Mais lento que funções diretas \n