chr() returns a one-byte string for the supplied integer value. It is useful for byte-oriented work and ASCII examples; Unicode code points need a Unicode-aware approach.
echo chr(65); // A
echo chr(35); // #
chr() function to print ASCII characters , here are some examples.
$string = "Let us print a variable " . chr(36) . "my_var";echo $string; // Let us print a variable $my_var
Output ( char(36) is $ )
Let us print a variable $my_var
Here are additional printable ASCII examples:
echo "Let us print hash " . chr(35); // Let us print hash #
echo PHP_EOL;echo "Less than " . chr(60); // Less than <
We can use ord function to get ASCII value of any character// Printable ASCII range only: control bytes 0–31 and 127 are omitted.
echo '<table class="table table-sm"><tbody>';for ($i = 32; $i <= 126; $i++) {
echo '<tr><td>' . $i . '</td><td>'
. htmlspecialchars(chr($i), ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')
. '</td></tr>';}echo '</tbody></table>';
The printable-ASCII table is generated below:
| Byte | Character |
|---|---|
| 32 | |
| 33 | ! |
| 34 | " |
| 35 | # |
| 36 | $ |
| 37 | % |
| 38 | & |
| 39 | ' |
| 40 | ( |
| 41 | ) |
| 42 | * |
| 43 | + |
| 44 | , |
| 45 | - |
| 46 | . |
| 47 | / |
| 48 | 0 |
| 49 | 1 |
| 50 | 2 |
| 51 | 3 |
| 52 | 4 |
| 53 | 5 |
| 54 | 6 |
| 55 | 7 |
| 56 | 8 |
| 57 | 9 |
| 58 | : |
| 59 | ; |
| 60 | < |
| 61 | = |
| 62 | > |
| 63 | ? |
| 64 | @ |
| 65 | A |
| 66 | B |
| 67 | C |
| 68 | D |
| 69 | E |
| 70 | F |
| 71 | G |
| 72 | H |
| 73 | I |
| 74 | J |
| 75 | K |
| 76 | L |
| 77 | M |
| 78 | N |
| 79 | O |
| 80 | P |
| 81 | Q |
| 82 | R |
| 83 | S |
| 84 | T |
| 85 | U |
| 86 | V |
| 87 | W |
| 88 | X |
| 89 | Y |
| 90 | Z |
| 91 | [ |
| 92 | \ |
| 93 | ] |
| 94 | ^ |
| 95 | _ |
| 96 | ` |
| 97 | a |
| 98 | b |
| 99 | c |
| 100 | d |
| 101 | e |
| 102 | f |
| 103 | g |
| 104 | h |
| 105 | i |
| 106 | j |
| 107 | k |
| 108 | l |
| 109 | m |
| 110 | n |
| 111 | o |
| 112 | p |
| 113 | q |
| 114 | r |
| 115 | s |
| 116 | t |
| 117 | u |
| 118 | v |
| 119 | w |
| 120 | x |
| 121 | y |
| 122 | z |
| 123 | { |
| 124 | | |
| 125 | } |
| 126 | ~ |
A byte above 127 is not automatically a valid UTF-8 character. In HTML, use an entity or a UTF-8 literal for a copyright symbol; reserve chr() for the appropriate byte-oriented use:
// chr(169) is one byte, not a UTF-8 copyright symbol.
// For an HTML document, output an HTML entity instead:
echo 'Copyright: © 2026';
ASCII letter ranges can be generated with a loop:
for ($i = 65; $i <= 90; $i++) {
echo chr($i) . " "; // A through Z
}
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.