RTL Text Fixer

Stabilize mixed Hebrew, Arabic, Latin, Cyrillic, numbers and links with Unicode BiDi controls. Edit and copy the real plain text. Nothing is uploaded.

Direction
{{stateLabel}}
Original text {{source.length}} chars {{sourceControls.length}} controls
Fixed text {{output.length}} chars {{controlItems.length}} controls
{{controlSummary}} {{caretNote}} Source changed, manual result preserved {{warningCount}} control warnings
ZWJ or ZWNJ was found. These characters control letter joining rather than text direction, so the formatter preserves them unchanged.
{{securitySummary}}
Direction controls already present in the source are ignored, and every paragraph is rebuilt from its visible text.
{{skippedSummary}}
Control markers are hidden while the result is longer than {{overlayLimit}} characters. Changes and the control list stay available.
{{notice.text}}
No controls were needed for this text.
Nothing to analyse yet.
Nothing to preview yet — fix some text first.

{{accessibleControlSummary}}

About this tool

Safe detects each paragraph direction and wraps opposite-direction runs with LRI/RLI … PDI isolates. Compatibility uses LRM/RLM marks for older editors, and ALM where the run is Arabic. Clean only removes BiDi controls without adding new ones.

URLs, email addresses, phone numbers, dates, versions, paths and code are kept intact. Sentence punctuation stays outside a token isolate when the text returns to the paragraph direction. Turn off Isolate numbers to leave standalone numbers to the Unicode algorithm, which already renders them left to right inside RTL text.

Both panes annotate invisible controls, and the result is rendered with the base direction you picked, so RTL and LTR show how the text will look in a real container. The result updates live until you edit it manually. Undo and redo preserve those changes, while Changes and Paragraphs explain what happened to every paragraph. Dangerous overrides and broken pairs produce a focused cleanup action.

Export gives you the real code points, escaped forms for source code, HTML entities, or <bdi dir> markup for the cases where the correct fix belongs in the template rather than in the text.

Context preview shows the fixed text inside a chat bubble, an HTML paragraph, or a code string, since the surrounding markup and font can change how BiDi controls actually render. This is a representative mockup, not a guarantee — a real chat app, browser, or editor uses its own fonts, layout and BiDi handling, and may not display the exact same result. Click a row in Changes or Paragraphs to highlight that fragment in the preview.

Keyboard, with focus in the result field: Ctrl/Cmd+Z undo, Ctrl/Cmd+Shift+Z or Ctrl+Y redo, Alt+Shift+L/Alt+Shift+R insert LRM/RLM at the caret, Alt+Shift+1/2/3 wrap the selection as LTR/RTL/auto, and Alt+Shift+↓/Alt+Shift+↑ jump to the next or previous change.

All formatting, text-file import and export happen locally. Only interface preferences are remembered; source and result text are never stored.