A character limit on a web form is enforced by software, and "character" means whatever that software counts. In nearly every form that is each letter, digit, punctuation mark, space and line break. Your editor can still give a different number from the form, for three reasons: browsers count in UTF-16 code units, a line break can count as one character or two, and the server that receives the form may measure something else again, such as bytes.
Read the unit first
Forms state limits in characters or in words, and the two are not interchangeable: a box for "500 characters" holds a few sentences, and one for "500 words" holds several paragraphs. You cannot convert one into the other with any precision, as the guide on character count versus word count explains. If the limit is in characters and nothing more is said, assume everything counts.
Spaces and line breaks count
Spaces count. A form stores a space the same way it stores a letter. Some forms say so outright: UCAS gives the limit for its personal statement as 4,000 characters including spaces.
Line breaks count too. Pressing Enter puts a character into the text. A blank line between paragraphs is two of them. Paragraphing is therefore not free:
First paragraph.
Second paragraph.
Third paragraph.
The three sentences come to 49 characters. The four line breaks that lay them out as paragraphs bring the total to 53.
How the browser counts
The standard way for a web page to cap a field is the maxlength attribute:
<textarea name="statement" maxlength="500"></textarea>
The HTML Standard says the limit is measured using the length of the field's value, and the length of a string on the web platform is its number of UTF-16 code units. MDN puts the practical consequence in one sentence: the length "is often but not always equal to the number of characters". It is the same unit that JavaScript's length reports, which is covered in why JavaScript string length can be misleading.
For ordinary English text there is no difference. The gap opens with emoji and with some accented letters:
| You type | You see | maxlength counts |
|---|---|---|
| A letter, digit, space or curly quote | 1 character | 1 |
| Γ© stored as a single code point | 1 character | 1 |
| Γ© stored as e plus a combining accent | 1 character | 2 |
| π | 1 character | 2 |
| ππ½ | 1 character | 4 |
| π¨βπ©βπ§βπ¦ | 1 character | 11 |
| A line break in a multi-line box | 1 line break | 1 |
Not every form relies on maxlength. Some show their own "characters remaining" counter, driven by a script. A script that reads the text's length property gets the same UTF-16 figure as the table. One written to count visible characters shows 1 for each emoji. You cannot tell which you are dealing with from the outside, but you can test it: type a single emoji and watch whether the counter moves by one or by two.
The Character Counter shows both numbers, visible characters as its main figure and UTF-16 code units under Advanced statistics, so you can see in advance whether your text is one where they differ.
Why a line break can count twice
Inside a multi-line box, the HTML Standard has the browser count each line break as a single character. When the form is submitted in the standard way, though, the browser sends each line break as a pair: a carriage return followed by a line feed. The server therefore receives a text that is one character longer for every line break in it.
For the three-paragraph example above, the browser counts 53 and the server receives 57.
If the server applies the same number as its own limit without converting the line breaks back, a text the browser accepted can be refused. The HTML Standard tells servers not to rely on the browser's check, so a second check on the server is to be expected. Whether it counts line breaks once or twice is up to whoever built it.
The practical rule: when your text has line breaks and the form's counter shows you at or just under the limit, leave a margin of at least one character per line break. The guide on line breaks, tabs and spaces covers the same difference between Windows and other systems.
Why the server may count bytes
A limit on visible characters does not bound how much storage a text needs, because one visible character can be many bytes. The Unicode standard on text segmentation makes this point with a form as its example: a form might restrict submissions to a few hundred characters, counted as grapheme clusters, and at the same time to ten times that many UTF-8 bytes, to keep a ceiling on storage.
Real services do mix the two. YouTube's help pages give the limit for a video description as 5,000 characters, while its API reference states the same figure in bytes.
In UTF-8, the cost per character varies:
| Character | UTF-8 bytes |
|---|---|
| Unaccented Latin letters, digits, basic punctuation, a space | 1 |
| Γ©, Γ±, ΓΌ and a non-breaking space | 2 |
| Curly quotes, en and em dashes, the ellipsis character, β¬ | 3 |
| Most emoji, such as π | 4 |
English prose with a few curly quotes is only slightly longer in bytes than in characters. Greek and Arabic letters take two bytes each, and Chinese and Japanese characters take three. If a form rejects a text that its own counter says is short enough, a byte limit and doubled line breaks are the first things to suspect. UTF-8 bytes versus characters explains the encoding, and the guide to database field limits covers the storage side.
Pasting from Word and other editors
Text written in a word processor is not always the text you think you typed. Microsoft documents that Word can automatically change straight quotation marks to curly ones as you type. Text copied from a word processor, a PDF or a web page can also bring along dashes, ellipsis characters, non-breaking spaces and characters with no width at all.
| Character | Looks like | Browser count | UTF-8 bytes |
|---|---|---|---|
Straight quote " or ' |
Itself | 1 | 1 |
| Curly quote β β β β | A straight quote, more or less | 1 | 3 |
| En dash β or em dash β | A hyphen, more or less | 1 | 3 |
| Ellipsis character β¦ | Three dots | 1 | 3 |
| Non-breaking space | An ordinary space | 1 | 2 |
| Zero-width space | Nothing | 1 | 3 |
In a form that counts the way a browser does, these cost the same as their plain equivalents, and the ellipsis character is cheaper than three typed dots. Two things can still go wrong:
- Byte limits. The sentence
"It's finished," she said.is 26 characters and 26 bytes with straight quotes. With curly quotes it is still 26 characters but 32 bytes. - Invisible characters. A zero-width space takes up a character of your limit and shows nothing on screen. A non-breaking space looks exactly like a space and is not one.
To check a text before pasting it, put it in the counter and look at Advanced statistics. If "Whitespace characters" is higher than "Spaces" plus the tabs and line breaks you know about, there are special spaces in the text. A figure above zero for "Other" means invisible control or formatting characters, such as a zero-width space. And if "UTF-8 bytes" is well above "Characters" in a text you believed was plain English, it contains typographic or other non-ASCII characters.
If a form's preview or confirmation page shows odd symbols where your quotation marks or dashes were, the system behind it is not handling those characters. Replace them with plain ones and submit again.
What happens when you go over
There are three behaviors, and only one of them tells you clearly.
- The box stops accepting text. The HTML Standard allows a browser to prevent the value from growing past the limit, and MDN notes that browsers generally do. Typing just stops. With a paste, the part that does not fit may simply not arrive, and there is no message. Always read the end of a pasted text.
- The form shows an error. The text stays as you wrote it and you are told it is too long.
- The server refuses or shortens the text after you submit. This happens when the server's count is stricter than the browser's, for the reasons above. A well-built form sends you back with an error. A poorly built one may save a text that ends early.
For anything that matters, save or preview the form, open it again and check that the last sentence of every answer is still there.
A real example: the UCAS personal statement
For 2026 entry onwards, the UCAS personal statement is three separate questions that share one overall limit of 4,000 characters including spaces. UCAS says you can divide that allowance across the three answers in any way you choose. Each answer also has a minimum character count, which is labelled on the question boxes, and the form shows an overall character counter.
UCAS's guidance does not say how a line break or an emoji is counted. That makes the counter on the form the authority. Draft in your own editor, finish a little under the limit, paste each answer and read the form's counter, not yours.
The US Common App is tighter still: each activity description allows 150 characters. The guide to Common App character limits lists every field and shows, from Common App's own example, that spaces count.
Limits last reviewed: between and . Each row links to the source it was checked against. See the platform limits reference for notes on every entry.
Before you submit: a checklist
- Unit. Characters or words? If characters, does the form say anything about spaces?
- Count the text you will paste. Not the document it lives in. A word processor's total can include or leave out headers and footnotes, depending on the program.
- Margin. Leave at least one character per line break, more if the limit is tight and the form is unfamiliar.
- Special characters. Look for curly quotes, long dashes, non-breaking spaces and anything invisible. Decide whether to keep them.
- Trailing whitespace. Delete spaces and blank lines at the very end. They count and do nothing.
- Emoji. Each one can count as two or more. Test with one before relying on several.
- Paste, then read the form's counter. Trust it over any other count.
- Read the ending. After pasting, and again after saving, check that the text ends where you ended it.
For getting a draft down to size in the first place, see how to write clearly within a strict character limit.