✓ is the HTML entity for the check mark ✓, U+2713 CHECK MARK, and ✓ and ✓ are its numeric references. ✓ is an alias. Both names were added in HTML5; HTML 4 had none. In UTF-8 it’s E2 9C 93.
Character ✓ U+2713 CHECK MARK
Named ✓ ✓ (HTML5)
Numeric ✓ ✓
UTF-8 E2 9C 93
Encoding ✓ Saved ✔ Verified ✗ Failed gives:
✓ Saved ✔ Verified ✗ Failed
The heavy check mark ✔ has no name, so the tool writes its hex reference (hex digits can be either case); the ballot X ✗ is ✗.
The marks and their names
✓ U+2713 CHECK MARK ✓
✔ U+2714 HEAVY CHECK MARK ✔
✗ U+2717 BALLOT X ✗
✘ U+2718 HEAVY BALLOT X ✘
☑ U+2611 BALLOT BOX WITH CHECK ☑
✅ U+2705 WHITE HEAVY CHECK MARK ✅
Case matters: ⨯ is ⨯, U+2A2F, the vector cross product. ✓ and ✗ are plain text symbols; ✔ and ☑ are emoji with text style by default, drawn in color when followed by U+FE0F, and ✅ is always an emoji. If your web font lacks ✓, the browser takes it from a fallback font, so it may not match the text around it.
JSX doesn’t know ✓
JSX compilers decode only the names HTML 4 defined, plus '. In Babel, TypeScript, esbuild and oxc, <td>✓</td> renders the text ✓, while <td>✓</td> renders ✓. In JSX, write the numeric reference, the character itself or {'\u2713'}. Browsers, CommonMark and Python’s html.unescape read ✓ fine.
Lists and tables
A checklist needs no marks in the markup; CSS Lists Level 3 lets a string be the marker:
ul.done { list-style-type: "\2713 "; } /* two spaces: the escape eats one */
In a comparison table, a lone ✓ may be announced as “check mark” or skipped, depending on the screen reader. Pair it with words:
<td><span aria-hidden="true">✓</span> Included</td>