Подсветка полей, содержащих HTML

У меня есть поле, которое может содержать HTML-код в качестве пользовательского ввода. Если я использую простой маркер, он не экранирует ввод перед добавлением <em> тег. Например, если вход

"This is a <caption>"

и я ищу "заголовок", я получаю:

"This is a <<em>caption</em>>"

Но я хочу получить:

"This is a &lt;<em>caption</em>&gt;"

Который будет выглядеть так же, как ввод с выделенным совпадающим словом, когда отображается как 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 &lt;@@@hl@@@caption@@@endhl@@@&gt;
  • Замените стражей: This is a &lt;<em>caption</em>&gt;

В 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

X &lt; <em>Y</em> &lt; Z

при поиске "Y". XML-ответ Solr содержит

X &amp;lt; &lt;em&gt;Y&lt;/em&gt; &amp;lt; Z

в str-элементе, конечно.

Вы можете использовать String.replace для замены "<<" с "&lt;<" а также ">>" с ">&gt;", Если вы хотите более конкретные замены, вы также можете указать их

Другие вопросы по тегам