Вы могли бы реализовать механизм экранирования, основанный на некоторых символах, которые не выдержат процесс кодирования. Например, если вы вводите html-кодирование своего ввода, вы знаете, что после этого у вас не будет никаких символов <
или >
, поскольку они заменяются HTML-сущностями.
Таким образом, вы можете использовать в качестве escape-кода строку из <
или >
. Если вы собираетесь отображать окончательный код в браузере, вы можете использовать что-то вроде <!-- TOKEN -->
в качестве escape-кода, так как это не повлияет на визуализацию.
Ваш процесс кодирования может выглядеть следующим образом:
- строка ввода:
<hello> {{world}} <:how> are <you>
- заменить
<xxx>
на <xxx>
, где xxx не начинается с :
<hello> {{world}} <:how> are <you>
- заменить
<:xxx>
на {{<!-- TOKEN -->xxx}}
<hello> {{world}} {{<!-- TOKEN -->how}} are <you>
Отображается в браузере, {{world}}
и {{how}}
будут выглядеть одинаково, но они сохранят информацию о декодировании. Действительно, соответствующий процесс декодирования будет:
- входная строка:
<hello> {{world}} {{<!-- TOKEN -->how}} are <you>
- заменить
{{<!-- TOKEN -->xxx}}
на <:xxx>
<hello> {{world}} <:how> are <you>
- заменить
<xxx>
на <xxx>
<hello> {{world}} <:how> are <you>
Как я уже сказал, поскольку символы, на которых вы основали свой управляющий код, не могут появиться сами по себе в закодированном тексте, так как ввод, например {{<!-- TOKEN -->how}}
, не нарушит процесс кодирования / декодирования потому что он будет закодирован как {{<!-- TOKEN -->how}}
и, таким образом, полностью перевернут.