Why can an invisible joining character be legitimate?
Unicode defines U+200C ZERO WIDTH NON-JOINER (ZWNJ) and U+200D ZERO WIDTH JOINER (ZWJ) as layout controls that influence joining or glyph selection. The Standard provides legitimate use cases, including cursive scripts. This check flags joiners when their context is not recognized as legitimate and requires review.
Therefore, the presence of ZWJ or ZWNJ is not enough for automatic cleanup. In some languages and sequences, removing them can change correct text rendering. PROVEN should show the character and its neighborhood without assuming invisible means useless.
Examples of different contexts
These examples are illustrative and do not represent the exact rules PROVEN uses to determine contextual legitimacy. Real language and script review should respect the original text.
Letter + ZWNJ + letter in a cursive script[may be legitimate]Unicode documents ZWNJ as a way to request a break in joining in appropriate writing contexts; do not remove it merely because it is invisible.
ZWJ occurs where its role is unclearShow neighboring characters and field languageUnclear context is the reason for review, not proof that the sequence is wrong.
A joiner appears isolated where no joining need is apparent[candidate for investigation]Check the source and intended spelling before proposing removal.
What does PROVEN check?
Checks invisible joining characters when their context is not recognized as legitimate.
Why does it matter?
These characters can be necessary in some languages or scripts, so unclear context requires review.
Why does this matter in a multilingual catalog?
A catalog can contain names, brands, or descriptions in scripts with different joining rules. A rule that deletes all invisible characters could damage exactly the correct text it is supposed to clean.
The contextual detector exists to preserve that distinction. PROVEN does not declare language or spelling wrong merely because a joiner is present and does not promise automatic remediation. The merchant should validate the intended form, ideally from the original source or a competent language reviewer when needed.
What can PROVEN do?
PROVEN can show the character and its context; any change remains a decision for your review.
How PROVEN handles joiners
The workflow is deliberately conservative and preserves Unicode code point, neighboring characters, and text context before any change.
- Show character and positionPROVEN highlights the invisible joiner and surrounding characters without removing it from the evidence representation.
- Evaluate language contextThe merchant checks script, language, and intended form; the PROVEN check requires review precisely because some uses are legitimate.
- Decide keep or changeIf the joiner is needed, it remains. If confirmed as residue in an inappropriate context, any change is prepared and reviewed in a controlled way.
What should be avoided?
Do not apply a global “delete all ZWJ/ZWNJ” rule. Unicode assigns real joining functions to these characters, and correct form can depend on script and neighboring characters.
Do not confuse this detector with WORD JOINER U+2060 or ZERO WIDTH SPACE U+200B; these are different characters with different functions. PROVEN keeps separate findings for invisible-character families to preserve those semantics.
Explicit limitations
- The presence of ZWJ/ZWNJ is not, by itself, an error.
- The detector does not automatically declare text corrupted, malicious, or compromised.
- Not every language context can be decided correctly without reviewing the context or consulting the original source.
- This check is not equivalent to zero-width-space or word-joiner and must not be treated as such.
- This page does not promise SEO or commercial benefits from removing joining characters.
Frequently asked questions
What are ZWJ and ZWNJ?
Unicode defines ZERO WIDTH JOINER and ZERO WIDTH NON-JOINER as layout controls that can request more or less joining between characters.
Are they always invisible?
They do not render as an ordinary standalone glyph, but they can influence the form or joining of surrounding characters depending on script and renderer.
Why does PROVEN not remove them automatically?
Because Unicode documents legitimate uses. This check requires review when the context is not clearly recognized as legitimate.
Is WORD JOINER the same thing?
No. Unicode distinguishes WORD JOINER from ZWJ/ZWNJ; they have different functions and should not be merged into one remediation.
Sources and independent context
Unicode sources explain the function and contextual legitimacy of joiners and provide context for reviewing suspicious placements.
- Unicode 17 — Layout ControlsUnicode describes ZWJ/ZWNJ and how they influence joining or ligatures, including legitimate plain-text uses.
- Unicode — FAQ on unsupported/invisible charactersUnicode lists ZWJ/ZWNJ, WORD JOINER, and other invisible characters as distinct families with different functions.