How Modern Browsers Handle NFC and NFD Differently

Even though all modern browsers support Unicode fully, they do not agree on how to handle normalization internally. This creates subtle but important differences in behavior when users type, paste, or submit text across platforms.

Safari, being built on Apple’s core foundation, tends to preserve the decomposed form when text is entered or pasted. This means that when a user types “café” on a Mac, the browser often keeps the combining accents separate. In contrast, Chrome, Firefox, and Edge on Windows and Linux almost always convert text to the composed form automatically during input events.

Form Submission Differences

When a form is submitted, browsers may normalize the data before sending it to the server. However, this normalization is not consistent. Some browsers apply it only to certain fields, while others leave the text untouched. As a result, the same form filled on different devices can send completely different byte sequences for identical-looking text.

This inconsistency affects everything from login systems to search filters. A user who registers with an accented name on Safari might later fail to log in from Chrome if the server performs strict string matching without prior normalization.

URL and DOM Behavior

  • URLs containing accented characters are percent-encoded differently depending on normalization
  • DOM text nodes may display identical content but have different underlying string lengths
  • Event targets and selectors can behave unexpectedly when text nodes contain combining marks
  • Copy-paste operations between applications preserve the source normalization form

Why Client-Side Normalization Wins

Waiting for the server to normalize text is risky because the damage is already done by the time data arrives. The safest and fastest solution is to normalize text directly in the browser, immediately after input, before any form submission or storage occurs.

Doing this on the client ensures consistent behavior across all devices and browsers, eliminates surprises, and keeps user data clean from the very first moment it enters your application.

Browser differences in normalization are invisible to users but can break applications. Normalizing early in the browser is the only reliable defense.