ord()
Artigo sobre a função PHP ord(), usada para retornar o valor ASCII do primeiro caractere de uma string. Útil para trabalhar com texto.
A função PHP ord() retorna o valor do byte (0–255) do primeiro caractere de uma string. Para texto ASCII simples, este é o código ASCII do caractere — por exemplo, 'A' resulta em 65. É a inversa de chr(), que converte um número de volta em caractere.
Esta página aborda a sintaxe de ord(), como ela se comporta com as strings que você vai passar, o problema com multibytes que confunde a maioria das pessoas, e padrões práticos onde converter um caractere em seu código numérico é genuinamente útil.
Sintaxe
ord(string $character): intord() recebe um único argumento, a string a ser inspecionada, e retorna um inteiro. Apenas o primeiro caractere é examinado — o restante da string é ignorado.
| Parâmetro | Descrição |
|---|---|
$character | A string cujo primeiro caractere (byte) você deseja obter o valor numérico. |
Exemplo básico
Saída:
7272 é o código de "H", o primeiro caractere de "Hello". Como apenas o primeiro caractere importa, ord('ABC') e ord('A') retornam 65.
Valores de retorno comuns
Estes são os códigos que você encontrará com mais frequência ao trabalhar com texto:
<?php
echo ord('A'), "\n"; // 65 — start of uppercase letters
echo ord('a'), "\n"; // 97 — start of lowercase letters
echo ord('0'), "\n"; // 48 — start of digit characters
echo ord(' '), "\n"; // 32 — space
echo ord("\n"), "\n"; // 10 — newline (line feed)
echo ord(''), "\n"; // 0 — empty string yields 0
?>Saída:
65
97
48
32
10
0Observe a última linha: passar uma string vazia não gera um erro — ord('') simplesmente retorna 0.
O problema com multibytes
ord() trabalha com bytes, não com caracteres Unicode. Um caractere fora do intervalo ASCII básico (como é, €, ou qualquer emoji) é armazenado como vários bytes em UTF-8, e ord() retorna apenas o valor do primeiro byte:
<?php
echo ord('é'); // 195, not the Unicode code point 233
?>Saída:
195Se você precisar do ponto de código Unicode real de um caractere multibyte, use mb_ord() (da extensão mbstring):
<?php
echo mb_ord('é', 'UTF-8'); // 233
?>Por que usar ord()
Converter um caractere em número permite fazer aritmética e comparações que seriam complicadas com o próprio caractere.
Alterar maiúsculas/minúsculas manualmente. Letras maiúsculas e minúsculas estão exatamente 32 unidades separadas no ASCII, portanto você pode alternar entre elas adicionando ou subtraindo 32 com ord() e chr():
<?php
$char = 'A';
echo chr(ord($char) + 32); // a
?>Saída:
aInspecionar cada caractere em uma string. Use um laço com strlen() e indexe a string para ver o código de cada caractere — útil para depurar problemas de codificação ou construir uma cifra simples:
<?php
$s = 'PHP';
for ($i = 0; $i < strlen($s); $i++) {
echo $s[$i] . '=' . ord($s[$i]) . ' ';
}
?>Saída:
P=80 H=72 P=80 Validar entrada. Como letras e dígitos ocupam intervalos conhecidos, você pode testar a categoria de um caractere com uma comparação numérica, por exemplo ord($c) >= 48 && ord($c) <= 57 para verificar se $c é um dígito.
Funções relacionadas
chr()— a inversa: retorna o caractere para um dado valor ASCII/byte.strlen()— o número de bytes em uma string, útil para percorrer caracteres.str_split()— divide uma string em um array de caracteres.substr()— extrai parte de uma string.bin2hex()— visualiza os bytes brutos de uma string em hexadecimal.