Очистить документ
DOCX, ODT, HTML, Markdown или обычный текст. Файл открывается в вашем браузере и никуда не отправляется: отправлять его просто некуда.
- Работает в браузере
- DOCX · ODT · HTML · MD · TXT
- Исходный файл не меняется никогда
Перетащите файл сюда
DOCX, ODT, HTML, Markdown или обычный текст, до 25 МБ.
Что проверяется в каждом формате
Текстовые узлы очищаются в любом формате. Что ещё попадёт в отчёт, зависит от того, что формат умеет прятать.
| Формат | Очищает | Сообщает |
|---|---|---|
| DOCX | Текст в документе, колонтитулах, сносках, концевых сносках и примечаниях, включая символы, записанные числовыми сущностями. | Скрытые фрагменты, белое по белому и мелкий текст, исправления, примечания, сеансы rsid, метаданные об авторстве, пользовательские свойства, макросы, медиафайлы. |
| ODT | Каждый текстовый узел content.xml. Атрибуты не трогаются никогда. | Аннотации, области исправлений, скрытые стили, generator, авторы, циклы редактирования, поля, заданные пользователем. |
| HTML | Только текстовые узлы. Теги, атрибуты, комментарии, script и style проходят побайтово без изменений. | Комментарии, элементы с display:none / hidden / font-size:0, метатег generator, подозрительные символы в атрибутах alt/title/aria. |
| Markdown · TXT | Файл целиком. Концы строк сохраняются, если вы не попросите свести их. | Кроме самих символов, сообщать нечего: в обычном тексте прятаться просто негде. |
Как это работает
Выберите файл
Перетащите .docx, .odt, .html, .md или .txt на страницу или выберите файл кнопкой. Его читает браузер; никуда ничего не уходит.
Прочитайте отчёт
Каждый скрытый символ показан с позицией, кодовой позицией и именем Unicode, рядом с тем, что файл прячет вокруг текста: невидимые фрагменты, примечания, исправления, метаданные об авторстве.
Решите, что удалять
По умолчанию удаляются символы, которым в прозе не место нигде. Тринадцать дополнительных переключателей, а также метаданные и rsid, включаются вручную, потому что каждый меняет что-то видимое.
Скачайте очищенную копию
Новый файл создаётся в памяти и предлагается к скачиванию. Ваш оригинал не меняется никогда.
Посмотрите отчёт по документу
Файл .docx открывается в браузере, и отправлять его просто некуда. Отчёт сначала считает скрытые знаки в тексте по кодовым позициям, а затем переходит к тому, что прячется вокруг текста: исправления, примечания и метаданные авторства, пришедшие вместе с файлом. О них сообщается, но за вас их никто не удаляет.
Смотреть
Чтение отчёта по документу
30 секунд · Субтитры включены
Чего это не делает
- PDF. Текст в PDF нельзя безопасно переписать на месте; проверка и удаление метаданных запланированы, а редактирование нет.
- Изображения. EXIF, XMP и C2PA относятся к другой задаче и другому инструменту.
- Он никогда не удаляет скрытый фрагмент, исправление или примечание. О них сообщается, чтобы решали вы.
- Статистические водяные знаки вроде SynthID-Text живут в выборе слов, а не в символах. Здесь их ничто не трогает.
То же самое в командной строке
clean_file.py остаётся эталонной реализацией, портом которой является эта страница. Она работает офлайн, принимает те же флаги и имеет режим --check для pre-commit-хуков.
./clean_file.py --show essay.docx
./clean_file.py -i --metadata --rsids essay.docx
./clean_file.py -s --punct essay.docx
Вопросы о документах
Мой документ куда-нибудь отправляется?
Нет. Ghostchars работает как статический сайт без бэкенда. Файл читает ваш браузер через FileReader API, обрабатывает его во вкладке, и очищенная копия создаётся в памяти. Ничего не передаётся, и нет сервера, который мог бы это принять.
Какие форматы поддерживаются?
DOCX, ODT, HTML, Markdown и обычный текст. DOCX и ODT устроены как ZIP-пакеты с XML, которые браузер распаковывает и запаковывает обратно; в HTML очищаются только текстовые узлы; Markdown и обычный текст очищаются целиком.
Почему не PDF?
PDF хранит позиции глифов, а не редактируемые фрагменты текста, поэтому замена символа может изменить вёрстку или сломать файл. Отчёт по PDF и удаление его метаданных выполнимы и запланированы; а вот переписывать его текст втихую инструменту не следует.
Что такое rsid и зачем его удалять?
Word помечает каждый сеанс правки случайным восьмизначным шестнадцатеричным идентификатором ревизии и проставляет его на фрагментах, набранных в этом сеансе. Документ, у которого на весь текст один-два разных rsid, был вставлен за один раз, а не написан со временем. Их удаление убирает и этот вывод.
Word откроет очищенный файл?
Да. Каждая часть пакета сохраняет своё место и способ сжатия; переписывается только текст внутри изменившихся узлов, а там, где очистка иначе позволила бы Word проглотить краевой пробел, добавляется xml:space="preserve". С --metadata часть с пользовательскими свойствами удаляется, из-за чего остаётся висячая связь, которую Word терпит; тот же размен делает и инструмент командной строки.
А если скрытый символ записан сущностью?
Он всё равно будет пойман. Каждый текстовый узел декодируется из сущностей перед очисткой и экранируется обратно после неё, поэтому пробел нулевой ширины, записанный как ​, удаляется точно так же, как обычный.