ord()
Guida alla funzione PHP ord(), che restituisce il valore ASCII del primo carattere di una stringa. Utile per lavorare con i codici numerici dei caratteri.
La funzione PHP ord() restituisce il valore byte (0–255) del primo carattere di una stringa. Per testo ASCII semplice corrisponde al codice ASCII del carattere — ad esempio, 'A' restituisce 65. È l'inversa di chr(), che converte un numero nel carattere corrispondente.
Questa pagina illustra la sintassi di ord(), il suo comportamento con i tipi di stringhe più comuni, l'insidia dei caratteri multibyte che trae in inganno molti sviluppatori, e i pattern pratici in cui convertire un carattere nel suo codice numerico risulta davvero utile.
Sintassi
ord(string $character): intord() accetta un singolo argomento, la stringa da esaminare, e restituisce un intero. Viene esaminato solo il primo carattere — il resto della stringa viene ignorato.
| Parametro | Descrizione |
|---|---|
$character | La stringa di cui si vuole il valore numerico del primo carattere (byte). |
Esempio di base
Output:
7272 è il codice di "H", il primo carattere di "Hello". Poiché conta solo il primo carattere, ord('ABC') e ord('A') restituiscono entrambi 65.
Valori restituiti più comuni
Questi sono i codici che si incontrano più spesso quando si lavora con il testo:
<?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
?>Output:
65
97
48
32
10
0Si noti l'ultima riga: passare una stringa vuota non genera un errore — ord('') restituisce semplicemente 0.
L'insidia dei caratteri multibyte
ord() lavora sui byte, non sui caratteri Unicode. Un carattere al di fuori dell'intervallo ASCII di base (come é, €, o qualsiasi emoji) viene memorizzato in più byte in UTF-8, e ord() restituisce solo il valore del primo byte:
<?php
echo ord('é'); // 195, not the Unicode code point 233
?>Output:
195Se si ha bisogno del vero code point Unicode di un carattere multibyte, utilizzare invece mb_ord() (dall'estensione mbstring):
<?php
echo mb_ord('é', 'UTF-8'); // 233
?>Perché usare ord()
Convertire un carattere in un numero consente di eseguire operazioni aritmetiche e confronti che sarebbero scomodi sul carattere stesso.
Cambiare la maiuscola/minuscola manualmente. Le lettere maiuscole e minuscole si trovano a esattamente 32 di distanza nell'ASCII, quindi è possibile alternare la maiuscola aggiungendo o sottraendo 32 con ord() e chr():
<?php
$char = 'A';
echo chr(ord($char) + 32); // a
?>Output:
aEsaminare ogni carattere in una stringa. Si esegue un ciclo con strlen() e si accede alla stringa tramite indice per vedere il codice di ogni carattere — utile per il debug di problemi di codifica o per costruire un cifrario semplice:
<?php
$s = 'PHP';
for ($i = 0; $i < strlen($s); $i++) {
echo $s[$i] . '=' . ord($s[$i]) . ' ';
}
?>Output:
P=80 H=72 P=80 Validare l'input. Poiché lettere e cifre occupano intervalli noti, è possibile testare la categoria di un carattere con un confronto numerico, ad esempio ord($c) >= 48 && ord($c) <= 57 per verificare che $c sia una cifra.
Funzioni correlate
chr()— l'inversa: restituisce il carattere per un dato valore ASCII/byte.strlen()— il numero di byte in una stringa, utile per scorrere i caratteri.str_split()— suddivide una stringa in un array di caratteri.substr()— estrae una parte di una stringa.bin2hex()— visualizza i byte grezzi di una stringa in formato esadecimale.