chr()
A função chr() retorna um caractere específico com base no código ASCII. Veja a sintaxe, exemplos práticos e o comportamento fora do intervalo 0–255.
A função chr() do PHP retorna uma string de um único byte contendo o caractere que corresponde a um determinado valor de byte (geralmente um código ASCII). Ela é o inverso de ord(), que faz o caminho inverso — de um caractere para seu código numérico.
Esta página aborda a sintaxe de chr(), como ela lida com valores fora do intervalo 0–255 e padrões práticos para construir strings a partir de códigos numéricos.
Sintaxe
chr(int $codepoint): stringchr() aceita um parâmetro, $codepoint, o valor numérico do byte a retornar, e devolve uma string de um caractere (um byte). O valor é interpretado no intervalo 0–255. Valores fora desse intervalo são envolvidos usando módulo 256: o PHP adiciona ou subtrai 256 repetidamente até que o valor fique entre 0 e 255. Assim, chr(321) é o mesmo que chr(321 - 256), ou seja, chr(65), e chr(-1) é o mesmo que chr(255).
Exemplo básico
O uso mais comum é converter um código ASCII no seu caractere correspondente. O código 65 representa a letra A:
Saída:
APassamos o código ASCII para chr(), e ela retorna o caractere correspondente.
Gerando uma sequência de caracteres
Como as letras possuem códigos ASCII consecutivos, é possível percorrer um intervalo numérico para construir uma sequência. As letras maiúsculas A–Z vão de 65 a 90:
Saída:
A B C D E F G H I J K L M N O P Q R S T U V W X Y ZCada código ASCII é passado para chr(), que retorna a letra correspondente.
Valores fora de 0–255
chr() nunca gera um erro com valores fora do intervalo — ela usa módulo 256 para fazer o wraparound. Vale saber disso para não obter resultados inesperados quando operações aritméticas empurrem um valor além do intervalo de byte:
<?php
echo chr(65) . "\n"; // A (in range)
echo chr(321) . "\n"; // A 321 - 256 = 65
echo chr(256 + 65); // A wraps back to 65
?>As três linhas imprimem A, porque 321 e 256 + 65 ambos se reduzem a 65.
chr() vs. ord()
chr() e ord() formam um par complementar:
chr(int)→ retorna o caractere para um valor de byte.ord(string)→ retorna o valor de byte do primeiro caractere de uma string.
<?php
$code = ord("A"); // 65
echo chr($code); // A
?>Passar um valor por ord() e depois por chr() (ou vice-versa) retorna o original — eles formam uma operação de ida e volta.
Uma nota sobre texto multibyte
chr() opera em bytes únicos, portanto é confiável apenas para ASCII (0–127) e outras codificações de byte único. Ela não produz um caractere multibyte UTF-8: passar um ponto de código Unicode acima de 255 não retornará o emoji ou a letra acentuada esperada — o valor será envolvido no intervalo 0–255. Para pontos de código Unicode completos, use mb_chr() (e mb_ord() para o inverso) da extensão mbstring.
Funções relacionadas
ord()— o inverso: converte um caractere para seu valor ASCII/byte.str_split()— divide uma string em um array de caracteres.strtoupper()— converte uma string para maiúsculas.- PHP Strings — visão geral do tratamento de strings em PHP.