Special characters in tag get removed for comparison on save

Basically, when you add a new term, WordPress will use term_exists() to validate term before add it to database.

  1. term_exists() uses sanitize_title() which uses remove_accents() and sanitize_title_with_dashes() to sanitize term.

  2. remove_accents() will converts all accent characters to ASCII characters and sanitize_title_with_dashes() will limits the output to alphanumeric characters, underscore (_) and dash (-), whitespaces will be converted to dashes, uppercase characters will be converted to lowercase characters.

  3. WordPress also doesn’t allow to create terms which have the same term slug at the same level of a taxonomy hierarchy.

So, every characters which don’t output the same term slug at the same level of a taxonomy hierarchy after passed through sanitize_title() function are allowed characters.