Результаты поиска в Drupal включают объекты HTML. Как я могу получить чистый вывод? - PullRequest
0 голосов
/ 09 июня 2011

Как получить чистый вывод html для страниц результатов поиска?Каждый раз, когда я пытаюсь включить специальные символы, такие как «&», в качестве части поискового запроса, я обычно получаю результаты с выделенным «&», но при этом включает в себя HTML-сущность.Таким образом, в результатах есть &, "и т.д ... Вот пример скриншота - http://min.us/mt3rOV5zVtOh6

Между тем, когда я выполняю поиск с" & ", включенным в поисковый термин, результат дает чистотуoutput.

Часть кода в search-result.tpl.php

http://pastebin.com/zCmMJLNh

Я уже пробовал несколько функций декодирования, но безуспешно.исправьте это уже несколько дней. Сайт использует Drupal 6, а поисковый модуль был переопределен.

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Вы говорите: «... модуль поиска был переопределен», это может быть причиной того, что фрагмент поиска остается htmlentityencoded на выходе (например, check_plain'd избежал html)

Лучшим решением было бынайти причину в модификации, например, функцию предварительной обработки, которая изменяет фрагмент поиска (если есть)

В качестве альтернативы, вы могли бы, вероятно, запустить фрагмент $ через decode_entities

то есть print decode_entities($snippet)

Предполагается, что html уже экранирован, а если нет, может представлять угрозу безопасности.

См. Также: http://php.net/manual/en/function.html-entity-decode.php и: http://www.php.net/manual/en/function.htmlspecialchars-decode.php

0 голосов
/ 09 июня 2011

Что ж, вы можете попробовать drupal_html_to_text , чтобы преобразовать фрагмент в простой текст.

Возможно, правильный путь - выяснить, почему эти результаты не конвертируются.Исходя из ваших комментариев, похоже, что проблема только в том, что вы ищете специально для «&».Точнее, это регулярное выражение в search.module (/modules/search/search.module - строка 1188 в 6):

preg_match_all('/ ("([^"]+)"|(?!OR)([^" ]+))/', ' '. $keys, $matches);

Соответствует только пробелам перед ключевым словом (не после).Вы можете изменить здесь ключи $ как:

if ($keys == '&') $keys = '&'

или что-то в этом роде (конечно, это означает взлом ядра - ме).

Вы также можете добавить form_alter через модуль иизменить форму поиска (см. эту ссылку на как добавить form_alter ).Затем вы можете добавить собственный обработчик отправки , который изменит поисковый термин в форме перед его отправкой.

...