Подсветка полей, содержащих HTML
У меня есть поле, которое может содержать HTML-код в качестве пользовательского ввода. Если я использую простой маркер, он не экранирует ввод перед добавлением <em>
тег. Например, если вход
"This is a <caption>"
и я ищу "заголовок", я получаю:
"This is a <<em>caption</em>>"
Но я хочу получить:
"This is a <<em>caption</em>>"
Который будет выглядеть так же, как ввод с выделенным совпадающим словом, когда отображается как HTML.
3 ответа
Одним из методов является использование какой-либо другой строки для обозначения выделения. Увидеть hl.simple.pre
а такжеhl.simple.post
, Таким образом, вы можете сначала выполнить экранирование, не теряя подсветку, а затем заменить стражу разметкой подсветки в качестве последнего шага.
Например, клиент Sunspot Solr для Ruby использует @@@hl@@@
для hl.simple.pre
парам, и @@@endhl@@@
для hl.simple.post
пары. Используя эти значения...
- Solr возвращает:
This is a <@@@hl@@@caption@@@endhl@@@>
- HTML экранирование:
This is a <@@@hl@@@caption@@@endhl@@@>
- Замените стражей:
This is a <<em>caption</em>>
В Solr 4.3.1 есть возможность включить определенный кодировщик для выделения, чтобы создавать экранированные фрагменты XML/HTML. Положил
<str name="hl.encoder">html</str>
ниже /config/requestHandler[@name="/select"]/lst[@name="defaults"] в файле solrconfig.xml. Параметр также может быть установлен в URL-адресе с помощью &hl.encoder=html. Стандартный файл solrconfig.xml содержит определение для этого кодировщика.
<!-- Configure the standard encoder -->
<encoder name="html" class="solr.highlight.HtmlEncoder" />
Пример: "X при поиске "Y". XML-ответ Solr содержит в str-элементе, конечно.X < <em>Y</em> < Z
X &lt; <em>Y</em> &lt; Z
Вы можете использовать String.replace для замены "<<"
с "<<"
а также ">>"
с ">>"
, Если вы хотите более конкретные замены, вы также можете указать их